diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-09-24 20:45:16 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-09-24 20:45:16 +0200 |
commit | decc7ec5183715bcd268dd6d6674ff0a94665c27 (patch) | |
tree | 08ec5292d22c52a1ba807e37793470ae69e0640b /sys/src/cmd/8c | |
parent | 4cb032442a1598611c684ca16f58950358502935 (diff) |
6c/8c: eleminate moves by swaping source and destination operands in peephole pass
Diffstat (limited to 'sys/src/cmd/8c')
-rw-r--r-- | sys/src/cmd/8c/peep.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/src/cmd/8c/peep.c b/sys/src/cmd/8c/peep.c index 06f668c56..8f0fae88a 100644 --- a/sys/src/cmd/8c/peep.c +++ b/sys/src/cmd/8c/peep.c @@ -315,6 +315,25 @@ subprop(Reg *r0) case AFSTSW: return 0; + case AORL: + case AANDL: + case AXORL: + case AADDL: + case AADCL: + /* + * can swap when: + * ADD R2, R1 + * MOV R1, R2 + * convert to: + * ADD R1, R2 + * MOV R2, R1 / no use for R1 + */ + if(p->to.type == v1->type && p->from.type == v2->type){ + copysub(&p->from, v2, v1, 1); + goto gotit; + } + break; + case AMOVL: if(p->to.type == v1->type) goto gotit; |