diff options
| -rw-r--r-- | sys/src/cmd/6c/peep.c | 18 | ||||
| -rw-r--r-- | sys/src/cmd/8c/peep.c | 19 |
2 files changed, 37 insertions, 0 deletions
diff --git a/sys/src/cmd/6c/peep.c b/sys/src/cmd/6c/peep.c index 1da2dcc7e..941f98904 100644 --- a/sys/src/cmd/6c/peep.c +++ b/sys/src/cmd/6c/peep.c @@ -170,6 +170,24 @@ loop1: } break; + case ALEAQ: + if(regtyp(&p->to)) { + r1 = rnops(uniqs(r)); + if(r1 != R){ + p1 = r1->prog; + if((p1->as == AMOVL || p1->as == AMOVQ) + && p1->to.type == p->to.type + && p1->from.type-D_INDIR == p->to.type + && p1->from.index == D_NONE + && p1->from.offset == 0){ + p->as = p1->as; + excise(r1); + t++; + } + } + } + break; + case AADDL: case AADDQ: case AADDW: diff --git a/sys/src/cmd/8c/peep.c b/sys/src/cmd/8c/peep.c index 482f17a65..439adbc4f 100644 --- a/sys/src/cmd/8c/peep.c +++ b/sys/src/cmd/8c/peep.c @@ -99,6 +99,25 @@ loop1: } } break; + + case ALEAL: + if(regtyp(&p->to)) { + r1 = uniqs(r); + if(r1 != R){ + p1 = r1->prog; + if(p1->as == AMOVL + && p1->to.type == p->to.type + && p1->from.type-D_INDIR == p->to.type + && p1->from.index == D_NONE + && p1->from.offset == 0){ + p->as = p1->as; + excise(r1); + t++; + } + } + } + break; + case AADDL: case AADDW: if(p->from.type != D_CONST || needc(p->link)) |
