IMMEDIATE4 = {INT cc;} 4 cost=(4,4) "#%[cc]"
DOUBLE = {STRING cc;} 4 cost=(4,4) "#%[cc]"
DOUBLEZERO = { } 4
+EXTENDED4 = {REGISTER reg;} 4 cost=(0,0) "%[reg]"
+
+REGINC1 = {REGISTER reg;} 2 cost=(0,3) "(%[reg])+"
+REGINC2 = {REGISTER reg;} 2 cost=(0,3) "(%[reg])+"
+REGINC4 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])+"
+REGDEC1 = {REGISTER reg;} 2 cost=(0,3) "-(%[reg])"
+REGDEC2 = {REGISTER reg;} 2 cost=(0,3) "-(%[reg])"
+REGDEC4 = {REGISTER reg;} 4 cost=(0,3) "-(%[reg])"
*************************************/
TOKENEXPRESSIONS:
+REGCH1 = REGINC1 + REGDEC1
+REGCH2 = REGINC2 + REGDEC2
+REGCH4 = REGINC4 + REGDEC4
+REGCH = REGCH1 + REGCH2 + REGCH4
DATA = DATAREG + IADDREG + DISPL + INDEXED +
- ABS + IMMEDIATE
+ ABS + IMMEDIATE + REGCH2
MEMORY = DATA - DATAREG
CONTROL = MEMORY - IMMEDIATE
ALTERABLE = DATAREG + IADDREG + DISPL +
- INDEXED + ABS
+ INDEXED + ABS + REGCH2
ANY = DATA + MEMORY + CONTROL + ALTERABLE
DATA_ALT = DATA * ALTERABLE
ALT_MEM = ALTERABLE * MEMORY
ADDSCR = ADDREG * SCRATCH
MEM_ALL = ALL - DATAREG - DATAREG4 - ADDREG - IMMEDIATE - IMMEDIATE4
- LOCAL_ADDR -REGOFF_ADDR - EXTERNAL_ADDR - DOUBLE - DOUBLEZERO
-ALL_ACCESSIBLE = IADDREG + IADDREG4 + IADDREG1 + INDEXED + INDEXED4
+ALL_ACCESSIBLE = IADDREG + IADDREG4 + IADDREG1 + INDEXED + INDEXED4 + REGCH
-ANY1 = DISPL1 + ABS1 + IADDREG1
+ANY1 = DISPL1 + ABS1 + IADDREG1 + REGCH1 + IMMEDIATE
DATA_ALT1 = ANY1
DATA_ALT_1OR2 = DATA_ALT + DATA_ALT1
-REG4 = DATAREG4 + ADDREG
+REG4 = DATAREG4 + ADDREG + EXTENDED4
DATA4 = DATAREG4 + IADDREG4 + DISPL4 + INDEXED4 +
- ABS4 + IMMEDIATE4 + DOUBLE
+ ABS4 + IMMEDIATE4 + DOUBLE + REGCH4 + EXTENDED4
MEMORY4 = DATA4 - DATAREG4
CONTROL4 = MEMORY4 - IMMEDIATE4 - DOUBLE
ALTERABLE4 = DATAREG4 + ADDREG + IADDREG4 + DISPL4 +
- INDEXED4 + ABS4
+ INDEXED4 + ABS4 + REGCH4 + EXTENDED4
ANY4 = DATA4 + MEMORY4 + CONTROL4 + ALTERABLE4 + LOCALBASE +
EXTERNAL_ADDR
DATA_ALT4 = DATA4 * ALTERABLE4
ALT_MEM4 = ALTERABLE4 * MEMORY4
DATASCR4 = DATAREG4 * SCRATCH
-
+NO_ADDREG = EXTERNAL_ADDR + ABS4 + IMMEDIATE4 + EXTENDED4 + DATAREG4
#endif
lol | | | {DISPL,LB,$1} | |
#ifdef REGVARS
-ldl inreg($1)==2 | | | regvar($1) | |
+ldl inreg($1)==2 | | remove(REGCH, %[reg] == regvar($1))
+ | regvar($1) | |
#endif
ldl | | | {DISPL4,LB,$1} | |
loe | | | {ABS,$1} | |
remove(MEM_ALL)
move({IMMEDIATE,(%[2.cc]-((%[2.cc]>>8)<<8)+128)%256-128},
{IADDREG1,%[1]}) | | |
-... | ADDREG ANY1 |
+... | ADDREG ANY1+DATAREG |
remove(MEM_ALL)
move(%[2],{IADDREG1,%[1]}) | | |
... | nocoercions: LOCAL_ADDR DATAREG |
remove(MEM_ALL)
move({IMMEDIATE,(%[2.cc]-((%[2.cc]>>8)<<8)+128)%256-128},
{DISPL1,LB,%[1.off]}) | | |
-... | nocoercions: LOCAL_ADDR ANY1 |
+... | nocoercions: LOCAL_ADDR ANY1+DATAREG |
remove(MEM_ALL)
move(%[2],{DISPL1,LB,%[1.off]}) | | |
... | nocoercions: REGOFF_ADDR DATAREG |
remove(MEM_ALL)
move({IMMEDIATE,(%[2.cc]-((%[2.cc]>>8)<<8)+128)%256-128},
{DISPL1,%[1.reg],%[1.off]}) | | |
-... | nocoercions: REGOFF_ADDR ANY1 |
+... | nocoercions: REGOFF_ADDR ANY1+DATAREG |
remove(MEM_ALL)
move(%[2],{DISPL1,%[1.reg],%[1.off]}) | | |
... | nocoercions: EXTERNAL_ADDR DATAREG |
remove(MEM_ALL)
move({IMMEDIATE,(%[2.cc]-((%[2.cc]>>8)<<8)+128)%256-128},
{ABS1,%[1.off]}) | | |
-... | nocoercions: EXTERNAL_ADDR ANY1 |
+... | nocoercions: EXTERNAL_ADDR ANY1+DATAREG |
remove(MEM_ALL)
move(%[2],{ABS1,%[1.off]}) | | |
sti $1 == 2 | ADDREG ANY | remove(MEM_ALL)
*/
ldl ldl adp sdl loi $1==$2 && $2==$4 && inreg($1)==2 && $3==1 && $5==1 | |
- allocate(DATAREG={IMMEDIATE,0})
remove(regvar($1))
- "move.b (%(regvar($1)%))+,%[a]" | %[a] | |
+ | { REGINC1, regvar($1)} | |
ldl ldl adp sdl loi $1==$2 && $2==$4 && inreg($1)==2 && $3==2 && $5==2 | |
- allocate(DATAREG)
remove(regvar($1))
- "move.w (%(regvar($1)%))+,%[a]" | %[a] | |
-ldl ldl adp sdl sti $1==$2 && $2==$4 && inreg($1)==2 && $3==1 && $5==1 | DATAREG |
+ | { REGINC2, regvar($1)} | |
+ldl ldl adp sdl loi $1==$2 && $2==$4 && inreg($1)==2 && $3==4 && $5==4 | |
+ remove(regvar($1))
+ | { REGINC4, regvar($1)} | |
+ldl adp sdl ldl loi $1==$3 && $1==$4 && $2==(0-1) && inreg($1)==2 && $5==1
+ | | remove(regvar($1))
+ | {REGDEC1,regvar($1)} | |
+ldl adp sdl ldl loi $1==$4 && $2==(0-2) && inreg($1)==2 && $3==$4 && $5==2
+ | | remove(regvar($1))
+ | {REGDEC2,regvar($1)} | |
+ldl adp sdl ldl loi $1==$4 && $2==(0-4) && inreg($1)==2 && $3==$4 && $5==4
+ | | remove(regvar($1))
+ | {REGDEC4,regvar($1)} | |
+ldl sti ldl adp sdl $1==$3 && $3==$5 && inreg($1)==2 && $2==1 && $4==1 | ANY1+DATAREG |
remove(regvar($1))
+ remove(MEM_ALL)
"move.b %[1],(%(regvar($1)%))+" | | |
-ldl ldl adp sdl sti $1==$2 && $2==$4 && inreg($1)==2 && $3==2 && $5==2 | ANY |
+ldl sti ldl adp sdl $1==$3 && $3==$5 && inreg($1)==2 && $2==2 && $4==2 | ANY |
remove(regvar($1))
+ remove(MEM_ALL)
"move.w %[1],(%(regvar($1)%))+" | | |
+ldl sti ldl adp sdl $1==$3 && $3==$5 && inreg($1)==2 && $2==4 && $4==4 | ANY4 |
+ remove(regvar($1))
+ remove(MEM_ALL)
+ "move.l %[1],(%(regvar($1)%))+" | | |
+ldl adp sdl ldl sti $1==$4 && inreg($1)==2 && $2==(0-1) && $5==1 && $3==$4
+ | ANY1+DATAREG |
+ remove(regvar($1))
+ remove(MEM_ALL)
+ "move.b %[1],-(%(regvar($1)%))" | | |
+ldl adp sdl ldl sti $1==$4 && inreg($1)==2 && $2==(0-2) && $5==2 && $3==$4
+ | ANY |
+ remove(regvar($1))
+ remove(MEM_ALL)
+ "move.w %[1],-(%(regvar($1)%))" | | |
+ldl adp sdl ldl sti $1==$4 && inreg($1)==2 && $2==(0-4) && $5==4 && $3==$4
+ | ANY4 |
+ remove(regvar($1))
+ remove(MEM_ALL)
+ "move.l %[1],-(%(regvar($1)%))" | | |
+
ldl ldl adp sdl $1==$2 && $2==$4 && inreg($1)==2 | |
allocate(ADDREG=regvar($1)) | %[a]
| ldl $2 adp $3 sdl $2 |
remove(regvar($1))
"add.w %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
-loc lil adi sil $2 == $4 && $3 == 2 && inreg($2)==2 | |
+lil adi sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
- "add.w #$1,(%(regvar($2)%))" | | |
-lil adi sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
- remove(ALL)
"add.w %[1],(%(regvar($1)%))" | | |
ldl ldc adi sdl $1 == $4 && $3 == 4 && inreg($1)==2 | |
remove(regvar($1))
"add.l #$2,%(regvar($1)%)"
erase(regvar($1)) | | |
-ldc ldl adi sdl $2 == $4 && $3 == 4 && inreg($2)==2 | |
- remove(regvar($2))
- "add.l #$1,%(regvar($2)%)"
- erase(regvar($2)) | | |
-ldl adi sdl $1 == $3 && $2 == 4 && inreg($1)==2 | DATAREG4 |
+ldl adi sdl $1 == $3 && $2 == 4 && inreg($1)==2 | DATAREG4+EXTENDED4+DOUBLE |
remove(regvar($1))
"add.l %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
remove(regvar($1))
"add.w %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
-loc lil adu sil $2 == $4 && $3 == 2 && inreg($2)==2 | |
- remove(MEM_ALL)
- "add.w #$1,(%(regvar($2)%))" | | |
-lil adu sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
+lil adu sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"add.w %[1],(%(regvar($1)%))" | | |
ldl ldc adu sdl $1 == $4 && $3 == 4 && inreg($1)==2 | |
remove(regvar($1))
"add.l #$2,%(regvar($1)%)"
erase(regvar($1)) | | |
-ldc ldl adu sdl $2 == $4 && $3 == 4 && inreg($2)==2 | |
- remove(regvar($2))
- "add.l #$1,%(regvar($2)%)"
- erase(regvar($2)) | | |
-ldl adu sdl $1 == $3 && $2 == 4 && inreg($1)==2 | DATAREG4 |
+ldl adu sdl $1 == $3 && $2 == 4 && inreg($1)==2 | DATAREG4+EXTENDED4+DOUBLE |
remove(regvar($1))
"add.l %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
ldl adp sdl $1 == $3 && inreg($1)==2 | | remove(regvar($1))
"add.l #$2,%(regvar($1)%)"
erase(regvar($1)) | | |
-ldl adp dup sdl loi inreg($1) == 2 && $1 == $4 && $3 == 4 && $5 == 4 | | | |
- ldl $1 adp $2 sdl $1 ldl $1 loi 4 |
ldl loi ldl loi adp ldl sti $2==4&&$4==4&&$7==4&&$1==$3&&$1==$6&&inreg($1)==2
| | remove(MEM_ALL)
allocate(ADDREG = {IADDREG4,regvar($1)})
remove(regvar($1))
"add.l #$2,%(regvar($1)%)"
erase(regvar($1)) | | |
-ldc ldl ads sdl $2 == $4 && $3 == 4 && inreg($2)==2 | |
- remove(regvar($2))
- "add.l #$1,%(regvar($2)%)"
- erase(regvar($2)) | | |
lil inc sil $1==$3 && inreg($1)==2 | |
remove(MEM_ALL)
"add.w #1,(%(regvar($1)%))"
remove(regvar($1))
"and.w %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
-loc lil and sil $2 == $4 && $3 == 2 && inreg($2)==2 | |
- remove(MEM_ALL)
- "and.w #$1,(%(regvar($2)%))" | | |
-lil and sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
+lil and sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"and.w %[1],(%(regvar($1)%))" | | |
lol ior stl $1 == $3 && $2 == 2 && inreg($1)==2 | ANY |
remove(regvar($1))
"or.w %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
-lil ior sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
+lil ior sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"or.w %[1],(%(regvar($1)%))" | | |
-loc lil ior sil $2 == $4 && $3 == 2 && inreg($2)==2 | |
- remove(MEM_ALL)
- "or.w #$1,(%(regvar($2)%))" | | |
lol loc xor stl $1 == $4 && $3 == 2 && inreg($1)==2 | |
remove(regvar($1))
"eor.w #$2,%(regvar($1)%)"
erase(regvar($1)) | | |
-loc lol xor stl $2 == $4 && $3 == 2 && inreg($2)==2 | |
- remove(regvar($2))
- "eor.w #$1,%(regvar($2)%)"
- erase(regvar($2)) | | |
-loc lil xor sil $2 == $4 && $3 == 2 && inreg($2)==2 | |
- remove(MEM_ALL)
- "eor.w #$1,(%(regvar($2)%))" | | |
-lol xor stl $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
+lol xor stl $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(regvar($1))
"eor.w %[1],%(regvar($1)%)"
erase(regvar($1)) | | |
-lil xor sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG |
+lil xor sil $1 == $3 && $2 == 2 && inreg($1)==2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"eor.w %[1],(%(regvar($1)%))" | | |
+ldl ldf adp ldl sdf inreg($1)==2 && $1==$4 && $2==$5 | |
+ remove(MEM_ALL)
+ "add.l #$3,$2(%(regvar($1)%))" | | |
+ldl ldf dup adp ldl sdf inreg($1)==2 && $1==$5 && $2==$6 && $3==4 | |
+ remove(MEM_ALL)
+ allocate(ADDREG={DISPL4,regvar($1), $2})
+ "add.l #$4,$2(%(regvar($1)%))"
+ erase(%[a]) | %[a] | |
+ldl lof inc ldl stf inreg($1)==2 && $1==$4 && $2==$5 | |
+ remove(MEM_ALL)
+ "add.w #1,$2(%(regvar($1)%))" | | |
+ldl lof dec ldl stf inreg($1)==2 && $1==$4 && $2==$5 | |
+ remove(MEM_ALL)
+ "sub.w #1,$2(%(regvar($1)%))" | | |
+ldl lof adi ldl stf inreg($1)==2 && $1==$4 && $2==$5 && $3==2
+ | IMMEDIATE+DATAREG |
+ remove(MEM_ALL)
+ "add.w %[1],$2(%(regvar($1)%))" | | |
+ldl lof sbi ldl stf inreg($1)==2 && $1==$4 && $2==$5 && $3==2
+ | IMMEDIATE+DATAREG |
+ remove(MEM_ALL)
+ "sub.w %[1],$2(%(regvar($1)%))" | | |
#endif
/* G R O U P III AND IV : I N T E G E R A R I T H M E T I C */
... | DATASCR ANY | "add.w %[2],%[1]"
erase(%[1])
setcc(%[1]) | %[1] | | (2,2)+%[2]
-loc lol adi stl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "add.w #$1,$2(a6)" | | | (6,10)
-loc lil adi sil $2 == $4 && $3 == 2 | |
- allocate(ADDREG = {DISPL4,LB,$2})
- remove(MEM_ALL)
- "add.w #$1,(%[a])" | | |
-lol adi stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG |
+lol adi stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"add.w %[1],$1(a6)" | | |
-loe adi ste $1 == $3 && $2 == 2 | DATAREG |
+loe adi ste $1 == $3 && $2 == 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"add.w %[1],$1" | | |
-lil adi sil $1 == $3 && $2 == 2 | DATAREG |
+lil adi sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
allocate(ADDREG={DISPL4,LB,$1})
remove(ALL)
"add.w %[1],(%[a])" | | |
loe loc adi ste $3 == 2 && $1 == $4 | |
remove(MEM_ALL)
"add.w #$2,$1" | | | (7,11)
-loc loe adi ste $3 == 2 && $2 == $4 | |
- remove(MEM_ALL)
- "add.w #$1,$2" | | | (7,11)
adi $1 == 4 | ANY4 DATASCR4 | "add.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | | (2,3)+%[1]
ldl ldc adi sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"add.l #$2,$1(a6)" | | | (8,16)
-ldc ldl adi sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "add.l #$1,$2(a6)" | | | (8,16)
lde ldc adi sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"add.l #$2,$1" | | | (9,17)
-ldc lde adi sde $3 == 4 && $2 == $4 | |
- remove(MEM_ALL)
- "add.l #$1,$2" | | | (9,17)
-ldl adi sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4 |
+ldl adi sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"add.l %[1],$1(a6)" | | |
-lde adi sde $1 == $3 && $2 == 4 | DATAREG4 |
+lde adi sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"add.l %[1],$1" | | |
sbi $1 == 2 | ANY DATASCR | "sub.w %[1],%[2]"
lol loc adu stl $1 == $4 && $3 == 2 && inreg($1) < 2 | |
remove(MEM_ALL)
"add.w #$2,$1(a6)" | | |
-loc lol adu stl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "add.w #$1,$2(a6)" | | |
-loc lil adu sil $2 == $4 && $3 == 2 | |
- allocate(ADDREG = {DISPL4,LB,$2})
- remove(MEM_ALL)
- "add.w #$1,(%[a])" | | |
-lol adu stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG |
+lol adu stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"add.w %[1],$1(a6)" | | |
-loe adu ste $1 == $3 && $2 == 2 | DATAREG |
+loe adu ste $1 == $3 && $2 == 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"add.w %[1],$1" | | |
-lil adu sil $1 == $3 && $2 == 2 | DATAREG |
+lil adu sil $1 == $3 && $2 == 2 | DATAREG+IMMEDIATE |
allocate(ADDREG={DISPL4,LB,$1})
remove(MEM_ALL)
"add.w %[1],(%[a])" | | |
loe loc adu ste $3 == 2 && $1 == $4 | |
remove(MEM_ALL)
"add.w #$2,$1" | | | (7,11)
-loc loe adu ste $3 == 2 && $2 == $4 | |
- remove(MEM_ALL)
- "add.w #$1,$2" | | | (7,11)
ldl ldc adu sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"add.l #$2,$1(a6)" | | | (8,16)
-ldc ldl adu sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "add.l #$1,$2(a6)" | | | (8,16)
lde ldc adu sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"add.l #$2,$1" | | | (9,17)
-ldc lde adu sde $3 == 4 && $2 == $4 | |
- remove(MEM_ALL)
- "add.l #$1,$2" | | | (9,17)
-ldl adu sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4 |
+ldl adu sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"add.l %[1],$1(a6)" | | |
-lde adu sde $1 == $3 && $2 == 4 | DATAREG4 |
+lde adu sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"add.l %[1],$1" | | |
lol loc sbu stl $1 == $4 && $3 == 2 && inreg($1) < 2 | |
lde adp sde $1 == $3 | | remove(MEM_ALL)
"add.l #$2,$1" | | | (9,17)
ldc ads loww(1) == 0 && highw(1) == 0 && $2 == 4 | | | | |
-ldc ads highw(1) == 0 && $2 == 4 | ADDREG |
+ldc ads highw(1) == 0 && loww(1) > 0 && loww(1) <= 32767 && $2 == 4 | ADDREG |
+ | {REGOFF_ADDR,%[1],loww(1)} | |
+ldc ads highw(1) == (0-1) && (loww(1) < 0 || loww(1) > 32767) && $2 == 4 | ADDREG |
| {REGOFF_ADDR,%[1],loww(1)} | |
ads $1 == 2 | ANY ADDSCR | "add.w %[1],%[2]"
erase(%[2])
ads $1 == 4 | ANY4 ADDSCR | "add.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | |
+#ifdef REGVARS
+ldl ads sdl $1==$3 && inreg($1)==2 && $2==4 | ANY4 |
+ remove(regvar($1))
+ "add.l %[1],%(regvar($1)%)" | | |
+ads sdl inreg($2)==2 && $1==4 | ANY4 NO_ADDREG |
+ remove(regvar($2))
+ move(%[1],regvar($2))
+ "add.l %[2],%(regvar($2)%)"
+ erase(regvar($2)) | | | (2,8)+%[2]
+... | NO_ADDREG ANY4 |
+ remove(regvar($2))
+ move(%[2],regvar($2))
+ "add.l %[1],%(regvar($2)%)"
+ erase(regvar($2)) | | | (2,8)+%[1]
+... | nocoercions : ANY4 STACK |
+ remove(regvar($2))
+ "move.l (sp)+,%(regvar($2)%)"
+ "add.l %[1],%(regvar($2)%)" | | | (4,8)+%[1]
+#endif
loc ldl ads sdl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
remove(MEM_ALL)
"add.l #$1,$2(a6)" | | | (8,16)
ldl ldc ads sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"add.l #$2,$1(a6)" | | | (8,16)
-ldc ldl ads sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "add.l #$1,$2(a6)" | | | (8,16)
lde ldc ads sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"add.l #$2,$1" | | | (9,17)
-ldc lde ads sde $3 == 4 && $2 == $4 | |
+ldl ads sdl $1==$3 && inreg($1)<2 && $2==4 | DOUBLE+DATAREG4+EXTENDED4 |
+ remove(MEM_ALL)
+ "add.l %[1],$1(a6)" | | |
+lde ads sde $1==$3 && $2==4 | DOUBLE+DATAREG4+EXTENDED4 |
remove(MEM_ALL)
- "add.l #$1,$2" | | | (9,17)
+ "add.l %[1],$1" | | |
sbs $1 == 2 | ANY4 DATASCR4 | "sub.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2.1] | |
/* G R O U P VIII : C O N V E R T */
+loc loc cii loc loc cii $1==$5 && $2==$4 && $1 <= $2 | | | | | /* should be peephole optim */
loc loc cii $1==$2 | | | | |
loc loc cuu $1==$2 | | | | |
loc loc ciu $1==$2 | | | | |
loc loc cii $1==1 && $2==2 | DATASCR |
"ext.w %[1]"
erase(%[1])
- setcc(%[1]) | %[1] | |
+ setcc(%[1]) | %[1] | | (2,3)
+... | nocoercions: ANY1 |
+ allocate(DATAREG)
+ "move.b %[1],%[a]"
+ "ext.w %[a]"
+ setcc(%[a]) | %[a] | | (4,6)+%[1]
loc loc cii $1==1 && $2==4 | ANY |
allocate(%[1],DATAREG4)
move(%[1],%[a.1])
"ext.l %[a]"
erase(%[a])
setcc(%[a]) | %[a] | |
-loc loc cuu $1==1 && $2==4 | nocoercions: DATASCR |
- "and.l #255,%[1]"
- erase(%[1])
- setcc(%[1]) | %[1] | |
-... | ANY |
- allocate(DATAREG4)
- "clr.l %[a]"
- move(%[1],%[a.1])
- erase(%[a])
- | %[a] | |
-... | ANY1 |
- allocate(DATAREG4)
- "clr.l %[a]"
- "move.b %[1],%[a.1]"
- erase(%[a])
- | %[a] | |
loc loc cii $1==2 && $2==4 | ANY |
allocate(%[1],DATAREG4)
move(%[1],%[a.1])
"ext.l %[a]"
erase(%[a])
setcc(%[a]) | %[a] | |
+#ifdef REGVARS
+lol loc loc cii inreg($1)==2 && $2==2 && $3==4 | |
+ "ext.l %(regvar($1)%)"
+ | { EXTENDED4, regvar($1) } | |
+#endif
loc loc cuu $1==2 && $2==4 | | | {IMMEDIATE,0} | |
loc loc ciu $1==2 && $2==4 | | | {IMMEDIATE,0} | |
loc loc cui $1==2 && $2==4 | | | {IMMEDIATE,0} | |
loc loc loc cui $1 == 0 && $2 == 2 && $3 == 4 | | | {DOUBLE,"0"} | |
loc loc cii $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
-... | ANY ANY | | %[2] | |
+... | ANY-REGCH2 ANY | | %[2] | |
loc loc cuu $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
-... | ANY | | | |
+... | ANY-REGCH2 | | | |
loc loc ciu $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
-... | ANY | | | |
+... | ANY-REGCH2 | | | |
loc loc cui $1==4 && $2==2 | DATAREG4 | | %[1.1] | |
-... | ANY | | | |
+... | ANY-REGCH2 | | | |
loc loc loc cuu $2 == 1 && $3 == 4 && $1 > 0 && $1 < 128 | | | | ldc $1 |
/* Floating point stuff */
erase(%[1]) | %[1] | | (2,2)+%[2]
lol loc and $2 == 255 && inreg($1) < 2 && $3 == 2 | | | {DISPL1,LB,$1+1} | |
lal loi and lal sti $1 == $4 && $2 == 1 && $3 == 2 && $5 == 1 && inreg($1) < 2
- | DATAREG |
+ | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"and.b %[1],$1(a6)" | | |
-loc lol and stl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "and.w #$1,$2(a6)" | | | (6,10)
loe loc and ste $3 == 2 && $1 == $4 | |
remove(MEM_ALL)
"and.w #$2,$1" | | | (7,11)
-loc loe and ste $3 == 2 && $2 == $4 | |
- remove(MEM_ALL)
- "and.w #$1,$2" | | | (7,11)
-loc lil and sil $2 == $4 && $3 == 2 | |
- allocate(ADDREG = {DISPL4,LB,$2})
- remove(MEM_ALL)
- "and.w #$1,(%[a])" | | |
-lol and stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG |
+lol and stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG + IMMEDIATE |
remove(MEM_ALL)
"and.w %[1],$1(a6)" | | |
-loe and ste $1 == $3 && $2 == 2 | DATAREG |
+loe and ste $1 == $3 && $2 == 2 | DATAREG + IMMEDIATE |
remove(MEM_ALL)
"and.w %[1],$1" | | |
-lil and sil $1 == $3 && $2 == 2 | DATAREG |
+lil and sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG + IMMEDIATE |
allocate(ADDREG={DISPL4,LB,$1})
remove(MEM_ALL)
"and.w %[1],(%[a])" | | |
ldl ldc and sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"and.l #$2,$1(a6)" | | | (8,16)
-ldc ldl and sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "and.l #$1,$2(a6)" | | | (8,16)
lde ldc and sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"and.l #$2,$1" | | | (9,17)
-ldc lde and sde $3 == 4 && $2 == $4 | |
- remove(MEM_ALL)
- "and.l #$1,$2" | | | (9,17)
-ldl and sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4 |
+ldl and sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"and.l %[1],$1(a6)" | | |
-lde and sde $1 == $3 && $2 == 4 | DATAREG4 |
+lde and sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"and.l %[1],$1" | | |
and defined($1) && $1 > 4 | STACK |
erase(%[1])
setcc(%[1]) | %[1] | | (2,2)+%[2]
lal loi ior lal sti $1 == $4 && $2 == 1 && $3 == 2 && $5 == 1 && inreg($1) < 2
- | DATAREG |
+ | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"or.b %[1],$1(a6)" | | |
-loc lol ior stl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "or.w #$1,$2(a6)" | | | (6,10)
-lol ior stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG |
+lol ior stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"or.w %[1],$1(a6)" | | |
-loe ior ste $1 == $3 && $2 == 2 | DATAREG |
+loe ior ste $1 == $3 && $2 == 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"or.w %[1],$1" | | |
-lil ior sil $1 == $3 && $2 == 2 | DATAREG |
+lil ior sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
allocate(ADDREG={DISPL4,LB,$1})
remove(MEM_ALL)
"or.w %[1],(%[a])" | | |
loe loc ior ste $3 == 2 && $1 == $4 | |
remove(MEM_ALL)
"or.w #$2,$1" | | | (7,11)
-loc loe ior ste $3 == 2 && $2 == $4 | |
- remove(MEM_ALL)
- "or.w #$1,$2" | | | (7,11)
-loc lil ior sil $2 == $4 && $3 == 2 | |
- allocate(ADDREG = {DISPL4,LB,$2})
- remove(MEM_ALL)
- "or.w #$1,(%[a])" | | |
ior defined($1) && $1 == 4 | ANY4-ADDREG DATASCR4 |
"or.l %[1],%[2]"
erase(%[2])
ldl ldc ior sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"or.l #$2,$1(a6)" | | | (8,16)
-ldc ldl ior sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "or.l #$1,$2(a6)" | | | (8,16)
lde ldc ior sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"or.l #$2,$1" | | | (9,17)
-ldc lde ior sde $3 == 4 && $2 == $4 | |
- remove(MEM_ALL)
- "or.l #$1,$2" | | | (9,17)
-ldl ior sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4 |
+ldl ior sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"or.l %[1],$1(a6)" | | |
-lde ior sde $1 == $3 && $2 == 4 | DATAREG4 |
+lde ior sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"or.l %[1],$1" | | |
ior defined($1) && $1 > 4 | STACK |
erase(%[1])
setcc(%[1]) | %[1] | | (2,2)+%[2]
lal loi xor lal sti $1 == $4 && $2 == 1 && $3 == 2 && $5 == 1 && inreg($1) < 2
- | DATAREG |
+ | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"eor.b %[1],$1(a6)" | | |
lol loc xor stl $1 == $4 && $3 == 2 && inreg($1) < 2 | |
remove(MEM_ALL)
"eor.w #$2,$1(a6)" | | | (6,10)
-loc lol xor stl $2 == $4 && $3 == 2 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "eor.w #$1,$2(a6)" | | | (6,10)
loe loc xor ste $3 == 2 && $1 == $4 | |
remove(MEM_ALL)
"eor.w #$2,$1" | | | (7,11)
-loc loe xor ste $3 == 2 && $2 == $4 | |
- remove(MEM_ALL)
- "eor.w #$1,$2" | | | (7,11)
-loc lil xor sil $2 == $4 && $3 == 2 | |
- allocate(ADDREG = {DISPL4,LB,$2})
- remove(MEM_ALL)
- "eor.w #$1,(%[a])" | | |
-lol xor stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG |
+lol xor stl $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"eor.w %[1],$1(a6)" | | |
-loe xor ste $1 == $3 && $2 == 2 | DATAREG |
+loe xor ste $1 == $3 && $2 == 2 | DATAREG+IMMEDIATE |
remove(MEM_ALL)
"eor.w %[1],$1" | | |
-lil xor sil $1 == $3 && $2 == 2 | DATAREG |
+lil xor sil $1 == $3 && $2 == 2 && inreg($1) < 2 | DATAREG+IMMEDIATE |
allocate(ADDREG={DISPL4,LB,$1})
remove(MEM_ALL)
"eor.w %[1],(%[a])" | | |
-xor defined($1) && $1 == 4 | DATAREG4 DATASCR4 |
+xor defined($1) && $1 == 4 | DATAREG4+EXTENDED4 DATASCR4 |
"eor.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | | (2,3)+%[1]
-... | DATASCR4 DATAREG4 |
+... | DATASCR4 DATAREG4+EXTENDED4 |
"eor.l %[2],%[1]"
erase(%[1])
setcc(%[1]) | %[1] | | (2,3)+%[2]
ldl ldc xor sdl $1 == $4 && $3 == 4 && inreg($1) < 2 | |
remove(MEM_ALL)
"eor.l #$2,$1(a6)" | | | (8,16)
-ldc ldl xor sdl $2 == $4 && $3 == 4 && inreg($2) < 2 | |
- remove(MEM_ALL)
- "eor.l #$1,$2(a6)" | | | (8,16)
lde ldc xor sde $3 == 4 && $1 == $4 | |
remove(MEM_ALL)
"eor.l #$2,$1" | | | (9,17)
-ldc lde xor sde $3 == 4 && $2 == $4 | |
- remove(MEM_ALL)
- "eor.l #$1,$2" | | | (9,17)
-ldl xor sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4 |
+ldl xor sdl $1 == $3 && $2 == 4 && inreg($1) < 2 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"eor.l %[1],$1(a6)" | | |
-lde xor sde $1 == $3 && $2 == 4 | DATAREG4 |
+lde xor sde $1 == $3 && $2 == 4 | DATAREG4+EXTENDED4+DOUBLE |
remove(MEM_ALL)
"eor.l %[1],$1" | | |
xor defined($1) && $1 > 4 | STACK |
"rol.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | |
-ror defined($1) && $1 == 2 | DATAREG DATAREG |
+ror defined($1) && $1 == 2 | DATAREG DATASCR |
"ror %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | |
-ror defined($1) && $1 == 4 | DATAREG DATAREG4 |
+ror defined($1) && $1 == 4 | DATAREG DATASCR4 |
"ror.l %[1],%[2]"
erase(%[2])
setcc(%[2]) | %[2] | |
"cmp.w %[1],%[2]"
"bhi $2" | | |
-cmi tlt and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tlt and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"blt 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tlt ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tlt ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bge 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tle and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tle and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"ble 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tle ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tle ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bgt 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi teq and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi teq and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"beq 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi teq ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi teq ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bne 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tne and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tne and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bne 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tne ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tne ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"beq 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tge and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tge and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bge 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tge ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tge ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"blt 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tgt and $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tgt and $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"bgt 1f"
"clr %[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tgt ior $1==4 && $3==2 | ANY4 DATAREG4 DATASCR |
+cmi tgt ior $1==4 && $3==2 | ANY4 DATAREG4+EXTENDED4 DATASCR |
"cmp.l %[1],%[2]"
"ble 1f"
"bset #0,%[3]"
"1:"
erase(%[3]) | %[3] | |
-cmi tlt $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi tlt $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"blt 1f"
"clr %[a]"
"1:"
erase(%[a]) | %[a] | |
-cmi tle $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi tle $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"ble 1f"
"clr %[a]"
"1:"
erase(%[a]) | %[a] | |
-cmi teq $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi teq $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"beq 1f"
"clr %[a]"
"1:"
erase(%[a]) | %[a] | |
-cmi tne $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi tne $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"bne 1f"
"clr %[a]"
"1:"
erase(%[a]) | %[a] | |
-cmi tge $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi tge $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"bge 1f"
"clr %[a]"
"1:"
erase(%[a]) | %[a] | |
-cmi tgt $1==4 | ANY4 DATAREG4 | allocate(DATAREG={IMMEDIATE,1})
+cmi tgt $1==4 | ANY4 DATAREG4+EXTENDED4 | allocate(DATAREG={IMMEDIATE,1})
"cmp.l %[1],%[2]"
"bgt 1f"
"clr %[a]"
"jmp .csb"
| | |
dch | | | | loi 4 |
-dup $1 == 2 | ANY | | %[1] %[1] | |
-dup $1 == 4 | ANY4 | | %[1] %[1] | |
- ... | ANY ANY | | %[2] %[1] %[2] %[1] | |
+dup $1 == 2 | ANY-REGCH2 | | %[1] %[1] | |
+dup $1 == 4 | DATAREG4+ADDREG | | %[1] %[1] | |
+ ... | ANY-REGCH2 ANY-REGCH2 | | %[2] %[1] %[2] %[1] | |
dup $1 > 4 | STACK | allocate(ADDREG,DATAREG4)
"move.l sp,%[a]"
"add.l #$1,%[a]"
"move.l %[1],%[2]" setcc(%[2]),(2,2))
(ANY, DATA_ALT, "move.w %[1], %[2]"setcc(%[2]),(2,2)+%[1]+%[2])
(IMMEDIATE %[cc] == 0, ANY1, "clr.b %[2]" setcc(%[2]),(2,3)+%[2] )
-(ANY+ANY1, ANY1, "move.b %[1], %[2]"setcc(%[2]),(2,2)+%[1]+%[2])
+(ANY+ANY1-REGCH2, ANY1, "move.b %[1], %[2]"setcc(%[2]),(2,2)+%[1]+%[2])
(IMMEDIATE4 %[cc] == 0, DATA_ALT4, "clr.l %[2]"setcc(%[2]),(2,5)+%[2])
(DOUBLEZERO, DATA_ALT4, "clr.l %[2]"setcc(%[2]),(2,5)+%[2])
(DOUBLE %[cc] == "0", DATA_ALT4, "clr.l %[2]"setcc(%[2]),(2,5)+%[2])