diff options
| -rw-r--r-- | sys/src/cmd/6c/peep.c | 20 | ||||
| -rw-r--r-- | sys/src/cmd/8c/peep.c | 11 |
2 files changed, 21 insertions, 10 deletions
diff --git a/sys/src/cmd/6c/peep.c b/sys/src/cmd/6c/peep.c index b04b85a25..351dc887d 100644 --- a/sys/src/cmd/6c/peep.c +++ b/sys/src/cmd/6c/peep.c @@ -210,6 +210,13 @@ loop1: break; p1 = r1->prog; switch(p1->as){ + case ASHLQ: + case ASHRQ: + case ASALQ: + case ASARQ: + /* shift doesnt affect ZF when shift count is zero */ + if(p1->from.type != D_CONST || p1->from.offset == 0) + break; case AANDQ: case AORQ: case AXORQ: @@ -218,10 +225,6 @@ loop1: case AADCQ: case ASUBQ: case ASBBQ: - case ASHLQ: - case ASHRQ: - case ASALQ: - case ASARQ: case AINCQ: case ADECQ: if(p->as != ACMPQ) @@ -234,12 +237,17 @@ loop1: case AADCL: case ASUBL: case ASBBL: + case AINCL: + case ADECL: + excise(r); + break; case ASHLL: case ASHRL: case ASALL: case ASARL: - case AINCL: - case ADECL: + /* shift doesnt affect ZF when shift count is zero */ + if(p1->from.type != D_CONST || p1->from.offset == 0) + break; excise(r); } break; diff --git a/sys/src/cmd/8c/peep.c b/sys/src/cmd/8c/peep.c index b0f639dd7..06f668c56 100644 --- a/sys/src/cmd/8c/peep.c +++ b/sys/src/cmd/8c/peep.c @@ -150,6 +150,13 @@ loop1: break; p1 = r1->prog; switch(p1->as){ + case ASALL: + case ASARL: + case ASHLL: + case ASHRL: + /* shift doesnt affect ZF when shift count is zero */ + if(p1->from.type != D_CONST || p1->from.offset == 0) + break; case AANDL: case AORL: case AXORL: @@ -158,10 +165,6 @@ loop1: case AADCL: case ASUBL: case ASBBL: - case ASHLL: - case ASHRL: - case ASALL: - case ASARL: case AINCL: case ADECL: excise(r); |
