Added some patterns, and avoided a bug in the VAX assembler
This commit is contained in:
parent
729490c212
commit
3fc90a8000
1 changed files with 64 additions and 5 deletions
|
@ -4,6 +4,16 @@
|
||||||
/*#define DORCK /* define if you want RCK */
|
/*#define DORCK /* define if you want RCK */
|
||||||
#define FLOAT4 /* define if you want better 4-byte FP arithmetic */
|
#define FLOAT4 /* define if you want better 4-byte FP arithmetic */
|
||||||
#define FLOAT8 /* define if you want better 8-byte FP arithmetic */
|
#define FLOAT8 /* define if you want better 8-byte FP arithmetic */
|
||||||
|
#define ASBUG_AVOID /* define if you want to avoid a bug in the BSD 4.1 VAX
|
||||||
|
assembler, that sometimes generates "*1" for
|
||||||
|
(r1). This is avoided by generating 0(r1), which is
|
||||||
|
optimized by the assembler to (r1).
|
||||||
|
*/
|
||||||
|
#ifdef ASBUG_AVOID
|
||||||
|
#define REGDEFFORMAT "0(%[reg])"
|
||||||
|
#else
|
||||||
|
#define REGDEFFORMAT "(%[reg])"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define NC nocoercions :
|
#define NC nocoercions :
|
||||||
#define BSIZE 4
|
#define BSIZE 4
|
||||||
|
@ -91,10 +101,10 @@ EXTERNAL4 = {STRING ind;} 4 cost=(4,6) "%[ind]"
|
||||||
EXTERNAL8 = {STRING ind;} 8 cost=(4,9) "%[ind]"
|
EXTERNAL8 = {STRING ind;} 8 cost=(4,9) "%[ind]"
|
||||||
DOUBLE = {STRING ind;} 4 cost=(4,6) "$%[ind]"
|
DOUBLE = {STRING ind;} 4 cost=(4,6) "$%[ind]"
|
||||||
/* Now tokens for the target machine */
|
/* Now tokens for the target machine */
|
||||||
regdef1 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])"
|
regdef1 = {REGISTER reg;} 4 cost=(0,3) REGDEFFORMAT
|
||||||
regdef2 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])"
|
regdef2 = {REGISTER reg;} 4 cost=(0,3) REGDEFFORMAT
|
||||||
regdef4 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])"
|
regdef4 = {REGISTER reg;} 4 cost=(0,3) REGDEFFORMAT
|
||||||
regdef8 = {REGISTER reg;} 8 cost=(0,6) "(%[reg])"
|
regdef8 = {REGISTER reg;} 8 cost=(0,6) REGDEFFORMAT
|
||||||
#ifdef REGVARS
|
#ifdef REGVARS
|
||||||
reginc1 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])+"
|
reginc1 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])+"
|
||||||
reginc2 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])+"
|
reginc2 = {REGISTER reg;} 4 cost=(0,3) "(%[reg])+"
|
||||||
|
@ -271,7 +281,7 @@ loc $1>=256 && $1<65536 | | | {CONST2,$1} | |
|
||||||
loc | | | {CONST4,$1} | |
|
loc | | | {CONST4,$1} | |
|
||||||
ldc | | | {CONST8,$1} | |
|
ldc | | | {CONST8,$1} | |
|
||||||
#ifdef REGVARS
|
#ifdef REGVARS
|
||||||
lol inreg($1)==2 | | | regvar($1) | |
|
lol inreg($1)==2 | | REMREG($1) | regvar($1) | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
lol $1 < 0 | | | {LOCAL4,LB,$1,4} | |
|
lol $1 < 0 | | | {LOCAL4,LB,$1,4} | |
|
||||||
lol $1 >= 0 | | | {LOCAL4,AP,$1,4} | |
|
lol $1 >= 0 | | | {LOCAL4,AP,$1,4} | |
|
||||||
|
@ -676,6 +686,11 @@ adi sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"addl3\t%[1],%[2],(%(regvar($2)%))"
|
"addl3\t%[1],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
adi lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"addl3\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
adi sil $1==4 && $2<0
|
adi sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
@ -729,6 +744,11 @@ sbi sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"subl3\t%[1],%[2],(%(regvar($2)%))"
|
"subl3\t%[1],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
sbi lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"subl3\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
sbi sil $1==4 && $2<0
|
sbi sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
@ -786,6 +806,11 @@ mli sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"mull3\t%[1],%[2],(%(regvar($2)%))"
|
"mull3\t%[1],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
mli lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"mull3\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
mli sil $1==4 && $2<0
|
mli sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
@ -839,6 +864,11 @@ dvi sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"divl3\t%[1],%[2],(%(regvar($2)%))"
|
"divl3\t%[1],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
dvi lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"divl3\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
dvi sil $1==4 && $2<0
|
dvi sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
@ -902,6 +932,14 @@ rmi sil $1==4 && inreg($2)==2
|
||||||
"mull2\t%[1],%[a]"
|
"mull2\t%[1],%[a]"
|
||||||
"subl3\t%[a],%[2],(%(regvar($2)%))"
|
"subl3\t%[a],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
rmi lol stf $1==4 && inreg($2)==2
|
||||||
|
| Xsource4 Xsource4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
allocate(REG)
|
||||||
|
"divl3\t%[1],%[2],%[a]"
|
||||||
|
"mull2\t%[1],%[a]"
|
||||||
|
"subl3\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
rmi sil $1==4 && $2<0
|
rmi sil $1==4 && $2<0
|
||||||
| Xsource4 Xsource4 |
|
| Xsource4 Xsource4 |
|
||||||
|
@ -961,6 +999,11 @@ ngi sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"mnegl\t%[1],(%(regvar($2)%))"
|
"mnegl\t%[1],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
ngi lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"mnegl\t%[1],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
ngi sil $1==4 && $2<0
|
ngi sil $1==4 && $2<0
|
||||||
| source4 |
|
| source4 |
|
||||||
|
@ -1010,6 +1053,11 @@ sli sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"ashl\t%[1],%[2],(%(regvar($2)%))"
|
"ashl\t%[1],%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | |
|
setcc({regdef4,regvar($2)}) | | |
|
||||||
|
sli lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"ashl\t%[1],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | |
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
sli sil $1==4 && $2<0
|
sli sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
@ -1092,6 +1140,17 @@ sri sil $1==4 && inreg($2)==2
|
||||||
REMEXTANDLOC
|
REMEXTANDLOC
|
||||||
"ashl\t$$%(0-%[1.num]%),%[2],(%(regvar($2)%))"
|
"ashl\t$$%(0-%[1.num]%),%[2],(%(regvar($2)%))"
|
||||||
setcc({regdef4,regvar($2)}) | | | (6,10)+%[1]+%[2]
|
setcc({regdef4,regvar($2)}) | | | (6,10)+%[1]+%[2]
|
||||||
|
sri lol stf $1==4 && inreg($2)==2
|
||||||
|
| source4 source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
allocate(%[1], REG)
|
||||||
|
"mnegl\t%[1],%[a]"
|
||||||
|
"ashl\t%[a],%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | | (9,14)+%[1]+%[2]
|
||||||
|
... | NC CONST source4 |
|
||||||
|
REMEXTANDLOC
|
||||||
|
"ashl\t$$%(0-%[1.num]%),%[2],$3(%(regvar($2)%))"
|
||||||
|
setcc({displ4,regvar($2),tostring($3)}) | | | (6,10)+%[1]+%[2]
|
||||||
#endif REGVARS
|
#endif REGVARS
|
||||||
sri sil $1==4 && $2<0
|
sri sil $1==4 && $2<0
|
||||||
| source4 source4 |
|
| source4 source4 |
|
||||||
|
|
Loading…
Reference in a new issue