fixes from Nigel Hall
This commit is contained in:
parent
41007486bf
commit
304f03a836
2 changed files with 197 additions and 156 deletions
|
@ -9,8 +9,9 @@
|
||||||
|
|
||||||
#define newilb(x) fprintf(codefile,"%s:\n",x)
|
#define newilb(x) fprintf(codefile,"%s:\n",x)
|
||||||
#define newdlb(x) fprintf(codefile,"%s:\n",x)
|
#define newdlb(x) fprintf(codefile,"%s:\n",x)
|
||||||
|
#define newplb(x) fprintf(codefile,".align 2\n%s:\n",x)
|
||||||
#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y)
|
#define dlbdlb(x,y) fprintf(codefile,"%s = %s\n",x,y)
|
||||||
#define newlbss(l,x) fprintf(codefile,"%s:.space\t%ld\n",l,x);
|
#define newlbss(l,x) fprintf(codefile,".comm\t%s,%ld\n",l,x)
|
||||||
|
|
||||||
#define cst_fmt "%ld"
|
#define cst_fmt "%ld"
|
||||||
#define off_fmt "%ld"
|
#define off_fmt "%ld"
|
||||||
|
|
|
@ -2,22 +2,37 @@ rcsid = "$Header$"
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* *
|
* *
|
||||||
* N S 1 6 0 3 2 B A C K - E N D T A B L E *
|
* N S 1 6 0 3 2 B A C K - E N D T A B L E *
|
||||||
* *
|
* *
|
||||||
* *
|
* *
|
||||||
* Author: Annita Wilschut. *
|
* Author: Annita Wilschut. *
|
||||||
* *
|
* *
|
||||||
|
* Corrections: Nigel Hall *
|
||||||
|
* *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
|
/* The handling of arrays was not complete. Tables extended
|
||||||
|
* in order to handle access to other lexical levels between
|
||||||
|
* local and global. Corrections to ordering of tokens made.
|
||||||
|
*
|
||||||
|
* The token length was added to cope with the length field
|
||||||
|
* of MOVMi instructions. The lengths adjusted by division by 4.
|
||||||
|
*
|
||||||
|
* The compare procedures did not return a result. Caused
|
||||||
|
* an extra word to be popped off the stack. The "cmi txx ior" &
|
||||||
|
* "txx and" sequences needed their branch criterion inverting.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deze tabel implementeert, naast gewone, ook floating point
|
* Deze tabel implementeert, naast gewone, ook floating point
|
||||||
* instructies. Bij gebrek aan een floating point processor
|
* instructies. Bij gebrek aan een floating point processor
|
||||||
* is het betreffende onderdeel van de tabel echter niet
|
* is het betreffende onderdeel van de tabel echter niet
|
||||||
* getest. Wanneer NOFLOAT "aan" is worden er zeker geen
|
* getest. Wanneer NOFLOAT "aan" is worden er zeker geen
|
||||||
* floating point instructies gegenereerd. Na verwijdering van
|
* floating point instructies gegenereerd. Na verwijdering van
|
||||||
* alle ifdef's worden er bij de vertaling van een programma dat
|
* alle ifdef's worden er bij de vertaling van een programma dat
|
||||||
* geen floating point gebruikt, hoogst waarschhijnlijk ook
|
* geen floating point gebruikt, hoogst waarschijnlijk ook
|
||||||
* geen floating point instructies gegenereerd. Dit is echter niet
|
* geen floating point instructies gegenereerd. Dit is echter niet
|
||||||
* uitgebreid getest.
|
* uitgebreid getest.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -38,6 +53,7 @@ PROGRAMCOUNTER
|
||||||
STACKPOINTER
|
STACKPOINTER
|
||||||
STATICBASE
|
STATICBASE
|
||||||
LOCALBASE
|
LOCALBASE
|
||||||
|
PROCREG /* processor register - used by LPRi & SPRi */
|
||||||
|
|
||||||
|
|
||||||
REGISTERS
|
REGISTERS
|
||||||
|
@ -50,10 +66,10 @@ f23("f2")=f2+f3,
|
||||||
f45("f4")=f4+f5,
|
f45("f4")=f4+f5,
|
||||||
f67("f6")=f6+f7 : DFREG.
|
f67("f6")=f6+f7 : DFREG.
|
||||||
r01("r0")=r0+r1,r23("r2")=r2+r3 : REGPAIR.
|
r01("r0")=r0+r1,r23("r2")=r2+r3 : REGPAIR.
|
||||||
sp : STACKPOINTER, MEMREG.
|
sp : STACKPOINTER, MEMREG, PROCREG.
|
||||||
pc : PROGRAMCOUNTER.
|
pc : PROGRAMCOUNTER.
|
||||||
fp : LOCALBASE, MEMREG.
|
fp : LOCALBASE, MEMREG, PROCREG.
|
||||||
sb : STATICBASE, MEMREG.
|
sb : STATICBASE, MEMREG, PROCREG.
|
||||||
|
|
||||||
|
|
||||||
TOKENS
|
TOKENS
|
||||||
|
@ -94,7 +110,9 @@ memregrelcon4 = { MEMREG reg; ADDR disp1; ADDR disp2;} 4 .
|
||||||
|
|
||||||
label = {ADDR disp; } 4 disp .
|
label = {ADDR disp; } 4 disp .
|
||||||
|
|
||||||
memregrelsid = {INT ind; MEMREG reg1; REG reg2; } 4 ind "(" reg1
|
regrelsid = {INT ind; REG reg1; REG reg2; } 4 ind "(" reg1
|
||||||
|
")[" reg2 ":d]" .
|
||||||
|
memregrelsid = {INT ind; MEMREG reg1; REG reg2; } 4 ind "(" reg1
|
||||||
")[" reg2 ":d]" .
|
")[" reg2 ":d]" .
|
||||||
abssid = {ADDR disp; REG reg; } 4 "@" disp "[" reg ":d]" .
|
abssid = {ADDR disp; REG reg; } 4 "@" disp "[" reg ":d]" .
|
||||||
fprelsid = {ADDR disp1; ADDR disp2; REG reg; } 4
|
fprelsid = {ADDR disp1; ADDR disp2; REG reg; } 4
|
||||||
|
@ -106,34 +124,34 @@ SETS
|
||||||
|
|
||||||
src1 = regrel1 + memregrel1 + memrel1 + absolute1 .
|
src1 = regrel1 + memregrel1 + memrel1 + absolute1 .
|
||||||
src2 = regrel2 + memregrel2 + memrel2 + absolute2 .
|
src2 = regrel2 + memregrel2 + memrel2 + absolute2 .
|
||||||
src4 = REG + const4 + LOCAL + regrel4 + memrel4 +
|
src4 = REG + const4 + LOCAL + regrel4 + memrel4 +
|
||||||
memregrel4 + memregrelsid + abssid + absolute4 +
|
memregrel4 + regrelsid + memregrelsid + abssid + absolute4 +
|
||||||
addr_external.
|
addr_external.
|
||||||
con4 = regcon4 + memregcon4 + memregrelcon4 .
|
con4 = regcon4 + memregcon4 + memregrelcon4 .
|
||||||
tossrc4 = TOS + src4 .
|
tossrc4 = TOS + src4 .
|
||||||
consrc4 = con4 + src4 .
|
consrc4 = con4 + src4 .
|
||||||
fsrc4 = FREG + LOCAL + regrel4 + memrel4 +
|
fsrc4 = FREG + LOCAL + regrel4 + memrel4 +
|
||||||
memregrel4 + memregrelsid + abssid + absolute4 .
|
memregrel4 + memregrelsid + abssid + absolute4 .
|
||||||
tosfsrc4 = TOS + fsrc4 .
|
tosfsrc4 = TOS + fsrc4 .
|
||||||
fsrc8 = DFREG + DLOCAL + regrel8 + memrel8 +
|
fsrc8 = DFREG + DLOCAL + regrel8 + memrel8 +
|
||||||
memregrel8 + absolute8 .
|
memregrel8 + absolute8 .
|
||||||
tosfsrc8 = TOS + fsrc8 .
|
tosfsrc8 = TOS + fsrc8 .
|
||||||
dst1 = src1 .
|
dst1 = src1 .
|
||||||
tosdst1 = TOS + dst1 .
|
tosdst1 = TOS + dst1 .
|
||||||
dst2 = src2 .
|
dst2 = src2 .
|
||||||
tosdst2 = TOS + dst2 .
|
tosdst2 = TOS + dst2 .
|
||||||
dst4 = REG + LOCAL + regrel4 + memregrel4 + memrel4 +
|
dst4 = REG + LOCAL + regrel4 + memregrel4 + memrel4 +
|
||||||
absolute4 + memregrelsid + abssid .
|
absolute4 + regrelsid + memregrelsid + abssid .
|
||||||
tosdst4 = TOS + dst4 .
|
tosdst4 = TOS + dst4 .
|
||||||
fdst4 = FREG + LOCAL + regrel4 + memregrel4 + memrel4 +
|
fdst4 = FREG + LOCAL + regrel4 + memregrel4 + memrel4 +
|
||||||
absolute4 + memregrelsid + abssid .
|
absolute4 + regrelsid + memregrelsid + abssid .
|
||||||
tosfdst4 = TOS + fdst4 .
|
tosfdst4 = TOS + fdst4 .
|
||||||
fdst8 = fsrc8 .
|
fdst8 = fsrc8 .
|
||||||
tosfdst8 = tosfsrc8 .
|
tosfdst8 = tosfsrc8 .
|
||||||
regrel = regrel1 + regrel2 + regrel4 +regrel8 .
|
regrel = regrel1 + regrel2 + regrel4 +regrel8 .
|
||||||
memregrel = memregrel1 + memregrel2 + memregrel4 +memregrel8 .
|
memregrel = memregrel1 + memregrel2 + memregrel4 +memregrel8 .
|
||||||
memrel = memrel1 + memrel2 + memrel4 +memrel8 .
|
memrel = memrel1 + memrel2 + memrel4 +memrel8 .
|
||||||
rel = regrel + memregrel + memrel + memregrelsid
|
rel = regrel + memregrel + memrel + regrelsid + memregrelsid
|
||||||
+ fprelsid + sprelsid .
|
+ fprelsid + sprelsid .
|
||||||
absolute = absolute1 + absolute2 + absolute4 + absolute8 + abssid .
|
absolute = absolute1 + absolute2 + absolute4 + absolute8 + abssid .
|
||||||
regs = REG + FREG + DFREG + MEMREG + REGPAIR .
|
regs = REG + FREG + DFREG + MEMREG + REGPAIR .
|
||||||
|
@ -213,7 +231,7 @@ sfsd tosdst4:wo .
|
||||||
tbitd tossrc4:ro, tosdst4:ro .
|
tbitd tossrc4:ro, tosdst4:ro .
|
||||||
cbitd tossrc4:ro, tosdst4:rw .
|
cbitd tossrc4:ro, tosdst4:rw .
|
||||||
sbitd tossrc4:ro, tosdst4:rw .
|
sbitd tossrc4:ro, tosdst4:rw .
|
||||||
movmd tosdst4:ro, tosdst4:rw, const4 .
|
movmd tossrc4:ro, tosdst4:rw, const4 .
|
||||||
indexd REG, tossrc4:ro, tossrc4:ro .
|
indexd REG, tossrc4:ro, tossrc4:ro .
|
||||||
brxx label .
|
brxx label .
|
||||||
beq label .
|
beq label .
|
||||||
|
@ -234,7 +252,8 @@ jsr tosdst4+label .
|
||||||
ret const4:ro .
|
ret const4:ro .
|
||||||
adjspd tossrc4:ro .
|
adjspd tossrc4:ro .
|
||||||
exit label .
|
exit label .
|
||||||
sprd MEMREG:rw, tossrc4:ro .
|
lprd PROCREG:rw, tossrc4:ro .
|
||||||
|
sprd PROCREG:ro, tossrc4:rw .
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -299,7 +318,7 @@ gen addr {memregrel4, %1, 0}, {TOS}
|
||||||
|
|
||||||
from addr_local to STACK
|
from addr_local to STACK
|
||||||
gen addr {memregrel4, fp, %1.ind}, {TOS}
|
gen addr {memregrel4, fp, %1.ind}, {TOS}
|
||||||
|
|
||||||
from regcon4 to STACK
|
from regcon4 to STACK
|
||||||
gen addr {regrel4, %1.reg, %1.disp}, {TOS}
|
gen addr {regrel4, %1.reg, %1.disp}, {TOS}
|
||||||
|
|
||||||
|
@ -367,7 +386,7 @@ uses REG
|
||||||
gen addr {memregrel4, %1.reg, %1.disp}, %a
|
gen addr {memregrel4, %1.reg, %1.disp}, %a
|
||||||
yields %a
|
yields %a
|
||||||
|
|
||||||
from LOCAL yields {memregrel4, fp, %1.ind}
|
from LOCAL yields {memregrel4, fp, %1.ind}
|
||||||
|
|
||||||
from addr_local
|
from addr_local
|
||||||
uses REG
|
uses REG
|
||||||
|
@ -385,7 +404,7 @@ gen addr {memrel4, %1.reg, %1.disp1, %1.disp2}, %a
|
||||||
yields %a
|
yields %a
|
||||||
|
|
||||||
from memregrel4 yields {memregrelcon4, %1.reg,
|
from memregrel4 yields {memregrelcon4, %1.reg,
|
||||||
%1.disp, 0}
|
%1.disp, 0}
|
||||||
|
|
||||||
from src1
|
from src1
|
||||||
uses REG
|
uses REG
|
||||||
|
@ -401,13 +420,13 @@ from DLOCAL yields {LOCAL, %1.ind+4}
|
||||||
from absolute8 yields {absolute4, %1.disp+4}
|
from absolute8 yields {absolute4, %1.disp+4}
|
||||||
{absolute4, %1.disp}
|
{absolute4, %1.disp}
|
||||||
|
|
||||||
from memrel8 yields {memrel4, %1.reg,
|
from memrel8 yields {memrel4, %1.reg,
|
||||||
%1.disp1, %1.disp1+4}
|
%1.disp1, %1.disp1+4}
|
||||||
{memrel4, %1.reg,
|
{memrel4, %1.reg,
|
||||||
%1.disp1, %1.disp1}
|
%1.disp1, %1.disp1}
|
||||||
|
|
||||||
from regrel8 yields {regrel4, %1.reg, %1.disp+4}
|
from regrel8 yields {regrel4, %1.reg, %1.disp+4}
|
||||||
{regrel4, %1.reg, %1.disp}
|
{regrel4, %1.reg, %1.disp}
|
||||||
|
|
||||||
from memregrel8 yields {memregrel4, %1.reg, %1.disp+4}
|
from memregrel8 yields {memregrel4, %1.reg, %1.disp+4}
|
||||||
{memregrel4, %1.reg, %1.disp}
|
{memregrel4, %1.reg, %1.disp}
|
||||||
|
@ -415,7 +434,7 @@ from memregrel8 yields {memregrel4, %1.reg, %1.disp+4}
|
||||||
PATTERNS
|
PATTERNS
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Group1 : load instructions *
|
* Group1 : load instructions *
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
pat loc yields {const4, $1}
|
pat loc yields {const4, $1}
|
||||||
|
@ -493,7 +512,7 @@ pat lal yields {addr_local, $1}
|
||||||
|
|
||||||
pat lae yields {addr_external, $1}
|
pat lae yields {addr_external, $1}
|
||||||
|
|
||||||
pat loi $1==1
|
pat loi $1==1
|
||||||
with exact MEMREG yields {memregrel1, %1, 0}
|
with exact MEMREG yields {memregrel1, %1, 0}
|
||||||
with REG yields {regrel1, %1, 0}
|
with REG yields {regrel1, %1, 0}
|
||||||
with exact memregcon4 yields {memregrel1, %1.reg, %1.disp}
|
with exact memregcon4 yields {memregrel1, %1.reg, %1.disp}
|
||||||
|
@ -539,10 +558,10 @@ pat loi defined($1)
|
||||||
with REG STACK
|
with REG STACK
|
||||||
uses REG = {const4, $1}
|
uses REG = {const4, $1}
|
||||||
gen addd %a, %1
|
gen addd %a, %1
|
||||||
1:
|
1:
|
||||||
subd {const4, 4}, %1
|
subd {const4, 4}, %1
|
||||||
movd {regrel4, %1, 0}, {TOS}
|
movd {regrel4, %1, 0}, {TOS}
|
||||||
acbd {const4, 0-4}, %a, {label, "1b"}
|
acbd {const4, 0-4}, %a, {label, "1b"}
|
||||||
|
|
||||||
pat los $1==4
|
pat los $1==4
|
||||||
kills ALL
|
kills ALL
|
||||||
|
@ -555,12 +574,12 @@ pat lde yields {absolute8, $1}
|
||||||
pat ldf
|
pat ldf
|
||||||
with exact addr_local yields {DLOCAL, %1.ind+$1}
|
with exact addr_local yields {DLOCAL, %1.ind+$1}
|
||||||
with exact addr_external yields {absolute8, %1.disp+$1}
|
with exact addr_external yields {absolute8, %1.disp+$1}
|
||||||
with regcon4 yields {regrel8, %1.reg,
|
with regcon4 yields {regrel8, %1.reg,
|
||||||
%1.disp+$1}
|
%1.disp+$1}
|
||||||
|
|
||||||
pat lpi yields {addr_external, $1}
|
pat lpi yields {addr_external, $1}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group2 : store instructions *
|
* Group2 : store instructions *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
@ -795,7 +814,7 @@ with exact addr_external consrc4 consrc4
|
||||||
with regcon4 consrc4 consrc4
|
with regcon4 consrc4 consrc4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen move %2, {regrel4, %1.reg, %1.disp+$1}
|
gen move %2, {regrel4, %1.reg, %1.disp+$1}
|
||||||
move %3, {regrel4, %1.reg, %1.disp+$1+4}
|
move %3, {regrel4, %1.reg, %1.disp+$1+4}
|
||||||
#ifndef NOFLOAT
|
#ifndef NOFLOAT
|
||||||
with exact addr_local DFREG
|
with exact addr_local DFREG
|
||||||
kills allmincon
|
kills allmincon
|
||||||
|
@ -841,7 +860,7 @@ gen addd %1, {absolute4, $1}
|
||||||
pat adi $1 == 4
|
pat adi $1 == 4
|
||||||
with exact MEMREG const4 yields {memregcon4, %1, %2.num}
|
with exact MEMREG const4 yields {memregcon4, %1, %2.num}
|
||||||
with exact REG const4 yields {regcon4, %1, %2.num}
|
with exact REG const4 yields {regcon4, %1, %2.num}
|
||||||
with exact const4 REG yields {regcon4, %2, %1.num}
|
with exact const4 REG yields {regcon4, %2, %1.num}
|
||||||
with exact memregrel4 const4 yields {memregrelcon4, %1.reg,
|
with exact memregrel4 const4 yields {memregrelcon4, %1.reg,
|
||||||
%1.disp, %2.num}
|
%1.disp, %2.num}
|
||||||
with exact memregcon4 const4 yields {memregcon4, %1.reg,
|
with exact memregcon4 const4 yields {memregcon4, %1.reg,
|
||||||
|
@ -853,7 +872,7 @@ with exact memregrelcon4 const4 yields {memregrelcon4, %1.reg,
|
||||||
with exact addr_local const4 yields {addr_local, %1.ind+%2.num}
|
with exact addr_local const4 yields {addr_local, %1.ind+%2.num}
|
||||||
with exact LOCAL const4 yields {memregrelcon4, fp,
|
with exact LOCAL const4 yields {memregrelcon4, fp,
|
||||||
%1.ind, %2.num}
|
%1.ind, %2.num}
|
||||||
with exact const4 LOCAL yields {memregrelcon4, fp,
|
with exact const4 LOCAL yields {memregrelcon4, fp,
|
||||||
%2.ind, %1.num}
|
%2.ind, %1.num}
|
||||||
with exact const4 addr_local yields {addr_local, %2.ind+%1.num}
|
with exact const4 addr_local yields {addr_local, %2.ind+%1.num}
|
||||||
with exact MEMREG addr_external yields {memregcon4, %1, %2.disp}
|
with exact MEMREG addr_external yields {memregcon4, %1, %2.disp}
|
||||||
|
@ -1004,8 +1023,8 @@ pat mlu $1 == 4
|
||||||
with src4 src4
|
with src4 src4
|
||||||
uses reusing %1, REGPAIR
|
uses reusing %1, REGPAIR
|
||||||
gen move %1, %a.1
|
gen move %1, %a.1
|
||||||
meid %2, %a yields %a.1
|
meid %2, %a yields %a.1
|
||||||
|
|
||||||
pat dvu $1 == 4
|
pat dvu $1 == 4
|
||||||
kills ALL
|
kills ALL
|
||||||
gen jsr {absolute4, ".dvu"} yields r0
|
gen jsr {absolute4, ".dvu"} yields r0
|
||||||
|
@ -1023,7 +1042,7 @@ with REG
|
||||||
pat sru $1 == 4
|
pat sru $1 == 4
|
||||||
with REG REG
|
with REG REG
|
||||||
gen negd %1, %1
|
gen negd %1, %1
|
||||||
lshd %1, %2 yields %2
|
lshd %1, %2 yields %2
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
|
@ -1165,7 +1184,7 @@ with exact memregrelcon4 yields {memregrelcon4, %1.reg,
|
||||||
%1.disp1, %1.disp2 + $1}
|
%1.disp1, %1.disp2 + $1}
|
||||||
with exact addr_external yields {addr_external, $1+%1.disp}
|
with exact addr_external yields {addr_external, $1+%1.disp}
|
||||||
with exact addr_local yields {addr_local, %1.ind + $1}
|
with exact addr_local yields {addr_local, %1.ind + $1}
|
||||||
with exact LOCAL yields {memregrelcon4, fp,
|
with exact LOCAL yields {memregrelcon4, fp,
|
||||||
%1.ind, $1}
|
%1.ind, $1}
|
||||||
|
|
||||||
pat loe loc ads ste $3==4 && $1==$4
|
pat loe loc ads ste $3==4 && $1==$4
|
||||||
|
@ -1191,7 +1210,7 @@ pat ads $1==4 leaving adi 4
|
||||||
pat sbs $1==4 leaving sbi 4
|
pat sbs $1==4 leaving sbi 4
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group7 : increment/decrement/zero *
|
* Group7 : increment/decrement/zero *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat inc
|
pat inc
|
||||||
|
@ -1269,7 +1288,7 @@ pat zer $1==8 yields {const4, 0}
|
||||||
{const4, 0}
|
{const4, 0}
|
||||||
|
|
||||||
pat zer $1==12 yields {const4, 0}
|
pat zer $1==12 yields {const4, 0}
|
||||||
{const4, 0}
|
{const4, 0}
|
||||||
{const4, 0}
|
{const4, 0}
|
||||||
|
|
||||||
pat zer $1>12
|
pat zer $1>12
|
||||||
|
@ -1280,7 +1299,7 @@ with STACK
|
||||||
acbd {const4, 0-1}, %a, {label, "1b"}
|
acbd {const4, 0-1}, %a, {label, "1b"}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group8 : convert *
|
* Group8 : convert *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat loc loc cii $1==4 && $2==4
|
pat loc loc cii $1==4 && $2==4
|
||||||
|
@ -1351,7 +1370,7 @@ uses FREG
|
||||||
pat cff
|
pat cff
|
||||||
kills ALL
|
kills ALL
|
||||||
gen jsr {absolute4, ".cff"}
|
gen jsr {absolute4, ".cff"}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
pat cif leaving loc 18 trp
|
pat cif leaving loc 18 trp
|
||||||
|
@ -1371,7 +1390,7 @@ pat cfu
|
||||||
leaving loc 18 trp
|
leaving loc 18 trp
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group9 : logical *
|
* Group9 : logical *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat loe loc and ste $3==4 && $1==$4
|
pat loe loc and ste $3==4 && $1==$4
|
||||||
|
@ -1410,7 +1429,7 @@ with REG src4
|
||||||
pat and $1>4
|
pat and $1>4
|
||||||
with STACK
|
with STACK
|
||||||
gen move {const4, $1}, r0
|
gen move {const4, $1}, r0
|
||||||
addr {memregrel4, sp, $1}, r1
|
addr {memregrel4, sp, $1}, r1
|
||||||
1:
|
1:
|
||||||
andd {TOS}, {regrel4, r1, 0}
|
andd {TOS}, {regrel4, r1, 0}
|
||||||
addr {regrel4, r1, 4}, r1
|
addr {regrel4, r1, 4}, r1
|
||||||
|
@ -1481,7 +1500,7 @@ with REG src4
|
||||||
pat ior $1>4
|
pat ior $1>4
|
||||||
with STACK
|
with STACK
|
||||||
gen move {const4, $1}, r0
|
gen move {const4, $1}, r0
|
||||||
addr {memregrel4, sp, $1}, r1
|
addr {memregrel4, sp, $1}, r1
|
||||||
1:
|
1:
|
||||||
ord {TOS}, {regrel4, r1, 0}
|
ord {TOS}, {regrel4, r1, 0}
|
||||||
addr {regrel4, r1, 4}, r1
|
addr {regrel4, r1, 4}, r1
|
||||||
|
@ -1506,7 +1525,7 @@ with REG src4
|
||||||
pat xor $1>4
|
pat xor $1>4
|
||||||
with STACK
|
with STACK
|
||||||
gen move {const4, $1}, r0
|
gen move {const4, $1}, r0
|
||||||
addr {memregrel4, sp, $1}, r1
|
addr {memregrel4, sp, $1}, r1
|
||||||
1:
|
1:
|
||||||
xord {TOS}, {regrel4, r1, 0}
|
xord {TOS}, {regrel4, r1, 0}
|
||||||
addr {regrel4, r1, 4}, r1
|
addr {regrel4, r1, 4}, r1
|
||||||
|
@ -1558,7 +1577,7 @@ with REG REG
|
||||||
rotd %1, %2 yields %2
|
rotd %1, %2 yields %2
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group10 : sets *
|
* Group10 : sets *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat inn zeq $1==4
|
pat inn zeq $1==4
|
||||||
|
@ -1579,11 +1598,11 @@ with src4 REG
|
||||||
pat inn $1==4
|
pat inn $1==4
|
||||||
with src4 REG
|
with src4 REG
|
||||||
uses REG
|
uses REG
|
||||||
gen tbitd %1, %2
|
gen tbitd %1, %2
|
||||||
sfsd %a
|
sfsd %a
|
||||||
cmpd {const4,0}, %1
|
cmpd {const4,0}, %1
|
||||||
ble {label, "1f"}
|
ble {label, "1f"}
|
||||||
xord %a, %a
|
xord %a, %a
|
||||||
1: yields %a
|
1: yields %a
|
||||||
|
|
||||||
pat inn $1>4
|
pat inn $1>4
|
||||||
|
@ -1591,10 +1610,10 @@ with src4 STACK
|
||||||
uses REG
|
uses REG
|
||||||
gen tbitd %1, {TOS}
|
gen tbitd %1, {TOS}
|
||||||
adjspd {const4, 0-4}
|
adjspd {const4, 0-4}
|
||||||
sfsd %a
|
sfsd %a
|
||||||
cmpd {const4,0}, %1
|
cmpd {const4,0}, %1
|
||||||
ble {label, "1f"}
|
ble {label, "1f"}
|
||||||
xord %a, %a
|
xord %a, %a
|
||||||
1: yields %a
|
1: yields %a
|
||||||
|
|
||||||
pat inn !defined($1)
|
pat inn !defined($1)
|
||||||
|
@ -1602,11 +1621,11 @@ with src4 src4 STACK
|
||||||
uses REG
|
uses REG
|
||||||
gen tbitd %2, {TOS}
|
gen tbitd %2, {TOS}
|
||||||
adjspd {const4, 0-4}
|
adjspd {const4, 0-4}
|
||||||
sfsd %a
|
sfsd %a
|
||||||
cmpd {const4,0}, %2
|
cmpd {const4,0}, %2
|
||||||
ble {label, "1f"}
|
ble {label, "1f"}
|
||||||
xord %a, %a
|
xord %a, %a
|
||||||
1: yields %a
|
1: yields %a
|
||||||
|
|
||||||
pat set $1==4
|
pat set $1==4
|
||||||
with src4
|
with src4
|
||||||
|
@ -1631,102 +1650,121 @@ with src4 src4 STACK
|
||||||
sbitd %2, {TOS}
|
sbitd %2, {TOS}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group11 : array *
|
* Group11 : array *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)==0
|
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)==0
|
||||||
leaving adi 2
|
leaving adi 2
|
||||||
|
|
||||||
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)!=0
|
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)!=0
|
||||||
leaving adi 2
|
leaving adi 2
|
||||||
adp 0-rom($1,1)
|
adp 0-rom($1,1)
|
||||||
|
|
||||||
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)==0
|
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)==0
|
||||||
with REG
|
with REG
|
||||||
gen ashd {const4, 1}, %1 yields %1
|
gen ashd {const4, 1}, %1 yields %1
|
||||||
leaving adi 2
|
leaving adi 2
|
||||||
|
|
||||||
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)!=0
|
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)!=0
|
||||||
with REG
|
with REG
|
||||||
gen ashd {const4, 1}, %1 yields {regcon4, %1,(0-2)*rom($1,1)}
|
gen ashd {const4, 1}, %1 yields {regcon4, %1,(0-2)*rom($1,1)}
|
||||||
leaving adi 2
|
leaving adi 2
|
||||||
|
|
||||||
pat lae aar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
pat lae aar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
||||||
|
with REG REG
|
||||||
|
uses REG
|
||||||
|
gen addr {regrelsid, 0, %2, %1}, %a
|
||||||
|
yields %a
|
||||||
with REG addr_local
|
with REG addr_local
|
||||||
uses REG
|
uses REG
|
||||||
gen addr {memregrelsid, %2.ind, fp, %1}, %a
|
gen addr {memregrelsid, %2.ind, fp, %1}, %a
|
||||||
yields %a
|
yields %a
|
||||||
with REG addr_external
|
with REG addr_external
|
||||||
uses REG
|
uses REG
|
||||||
gen addr {abssid, %2.disp, %1}, %a
|
gen addr {abssid, %2.disp, %1}, %a
|
||||||
yields %a
|
yields %a
|
||||||
with leaving lae $1 aar $2
|
with leaving lae $1 aar $2
|
||||||
|
|
||||||
pat lae aar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
pat lae aar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
||||||
|
with REG REG
|
||||||
|
uses REG
|
||||||
|
gen subd {const4, rom($1,1)}, %1
|
||||||
|
addr {regrelsid, 0, %2, %1}, %a
|
||||||
|
yields %a
|
||||||
with REG addr_local
|
with REG addr_local
|
||||||
uses REG
|
uses REG
|
||||||
gen subd {const4, rom($1,1)}, %1
|
gen subd {const4, rom($1,1)}, %1
|
||||||
addr {memregrelsid, %2.ind, fp, %1}, %a
|
addr {memregrelsid, %2.ind, fp, %1}, %a
|
||||||
yields %a
|
yields %a
|
||||||
with REG addr_external
|
with REG addr_external
|
||||||
uses REG
|
uses REG
|
||||||
gen subd {const4, rom($1,1)}, %1
|
gen subd {const4, rom($1,1)}, %1
|
||||||
addr {abssid, %2.disp, %1}, %a
|
addr {abssid, %2.disp, %1}, %a
|
||||||
yields %a
|
yields %a
|
||||||
with leaving lae $1 aar $2
|
with leaving lae $1 aar $2
|
||||||
|
|
||||||
pat lae lar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
pat lae lar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
||||||
with REG addr_local yields {memregrelsid, %2.ind, fp, %1}
|
with REG REG yields {regrelsid, 0, %2, %1}
|
||||||
with REG addr_external yields {abssid, %2.disp, %1}
|
with REG addr_local yields {memregrelsid, %2.ind, fp, %1}
|
||||||
with leaving lae $1 lar $2
|
with REG addr_external yields {abssid, %2.disp, %1}
|
||||||
|
with leaving lae $1 lar $2
|
||||||
|
|
||||||
pat lae lar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
pat lae lar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
||||||
|
with REG REG
|
||||||
|
gen subd {const4, rom($1,1)}, %1 yields {regrelsid, 0, %2, %1}
|
||||||
with REG addr_local
|
with REG addr_local
|
||||||
gen subd {const4, rom($1,1)}, %1
|
gen subd {const4, rom($1,1)}, %1 yields {memregrelsid, %2.ind, fp, %1}
|
||||||
yields {memregrelsid, %2.ind, fp, %1}
|
|
||||||
with REG addr_external
|
with REG addr_external
|
||||||
gen subd {const4, rom($1,1)}, %1
|
gen subd {const4, rom($1,1)}, %1 yields {abssid, %2.disp, %1}
|
||||||
yields {abssid, %2.disp, %1}
|
with leaving lae $1 lar $2
|
||||||
with leaving lae $1 lar $2
|
|
||||||
|
|
||||||
pat lae sar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
pat lae sar $2==4 && rom($1,3)==4 && rom($1,1)==0
|
||||||
with src4 REG addr_local
|
with REG REG src4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen move %1, {memregrelsid, %3.ind, fp, %2}
|
gen movd %3, {regrelsid, 0, %2, %1}
|
||||||
with src4 REG addr_external
|
with REG addr_local src4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen move %1, {abssid, %3.disp, %2}
|
gen move %3, {memregrelsid, %2.ind, fp, %1}
|
||||||
|
with REG addr_external src4
|
||||||
|
kills allmincon
|
||||||
|
gen move %3, {abssid, %2.disp, %1}
|
||||||
with leaving lae $1 sar $2
|
with leaving lae $1 sar $2
|
||||||
|
|
||||||
pat lae lar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
pat lae sar $2==4 && rom($1,3)==4 && rom($1,1)!=0
|
||||||
with src4 REG addr_local
|
with REG REG src4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen subd {const4, rom($1,1)}, %2
|
gen subd {const4, rom($1,1)}, %1
|
||||||
move %1, {memregrelsid, %3.ind, fp, %2}
|
movd %3, {regrelsid, 0, %2, %1}
|
||||||
with src4 REG addr_external
|
with REG addr_local src4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen subd {const4, rom($1,1)}, %2
|
gen subd {const4, rom($1,1)}, %1
|
||||||
move %1, {abssid, %3.disp, %2}
|
move %3, {memregrelsid, %2.ind, fp, %1}
|
||||||
|
with REG addr_external src4
|
||||||
|
kills allmincon
|
||||||
|
gen subd {const4, rom($1,1)}, %1
|
||||||
|
move %3, {abssid, %2.disp, %1}
|
||||||
with leaving lae $1 sar $2
|
with leaving lae $1 sar $2
|
||||||
|
|
||||||
pat lae aar $2==4 && rom($1,1)==0
|
pat lae aar $2==4 && rom($1,1)==0
|
||||||
with src4 REG
|
with REG src4
|
||||||
gen indexd %2, {const4, rom($1,3)-1}, %1 yields %2
|
gen indexd %1, {const4, rom($1,3)-1}, %2
|
||||||
|
yields %1
|
||||||
|
|
||||||
pat lae aar $2==4 && rom($1,1)!=0
|
pat lae aar $2==4 && rom($1,1)!=0
|
||||||
with REG REG
|
with REG src4
|
||||||
gen subd {const4,rom($1,1)}, %1
|
gen subd {const4, rom($1,1)}, %1
|
||||||
indexd %2, {const4, rom($1,3)-1}, %1 yields %2
|
indexd %1, {const4, rom($1,3)-1}, %2
|
||||||
|
yields %1
|
||||||
|
|
||||||
pat lae sar defined(rom($1,3))
|
pat lae sar defined(rom($1,3))
|
||||||
leaving lae $1
|
leaving lae $1
|
||||||
aar $2
|
aar $2
|
||||||
sti rom($1,3)
|
sti rom($1,3)
|
||||||
|
|
||||||
pat lae lar defined(rom($1,3))
|
pat lae lar defined(rom($1,3))
|
||||||
leaving lae $1
|
leaving lae $1
|
||||||
aar $2
|
aar $2
|
||||||
loi rom($1,3)
|
loi rom($1,3)
|
||||||
|
|
||||||
pat aar defined($1)
|
pat aar defined($1)
|
||||||
kills ALL
|
kills ALL
|
||||||
|
@ -1756,50 +1794,50 @@ kills ALL
|
||||||
gen jsr {absolute4, ".sar"}
|
gen jsr {absolute4, ".sar"}
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group12 : compare *
|
* Group12 : compare *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
proc cmitxxand
|
proc cmitxxand
|
||||||
with src4 src4 REG
|
with src4 src4 REG
|
||||||
gen cmpd %2, %1
|
gen cmpd %1, %2
|
||||||
brxx* {label, "1f"}
|
brxx* {label, "1f"}
|
||||||
xord %3, %3
|
movqd {const4, 0}, %3
|
||||||
1:
|
1: yields %3
|
||||||
|
|
||||||
proc cmitxxior
|
proc cmitxxior
|
||||||
with src4 src4 REG
|
with src4 src4 REG
|
||||||
gen cmpd %2, %1
|
gen cmpd %1, %2
|
||||||
brxx* {label, "1f"}
|
brxx* {label, "1f"}
|
||||||
sbitd {const4, 0}, %3
|
sbitd {const4, 0}, %3
|
||||||
1:
|
1: yields %3
|
||||||
|
|
||||||
proc txxand
|
proc txxand
|
||||||
with src4 REG
|
with src4 REG
|
||||||
gen cmpd {const4, 0}, %1
|
gen cmpqd {const4, 0}, %1
|
||||||
brxx* {label, "1f"}
|
brxx* {label, "1f"}
|
||||||
xord %2, %2
|
movqd {const4, 0}, %2
|
||||||
1:
|
1: yields %2
|
||||||
|
|
||||||
proc txxior
|
proc txxior
|
||||||
with src4 REG
|
with src4 REG
|
||||||
gen cmpd {const4, 0}, %1
|
gen cmpqd {const4, 0}, %1
|
||||||
brxx* {label, "1f"}
|
brxx* {label, "1f"}
|
||||||
sbitd {const4, 0}, %2
|
sbitd {const4, 0}, %2
|
||||||
1:
|
1: yields %2
|
||||||
|
|
||||||
pat cmi tlt and $1==4 && $3==4 call cmitxxand("blt")
|
pat cmi tlt and $1==4 && $3==4 call cmitxxand("bgt")
|
||||||
pat cmi tle and $1==4 && $3==4 call cmitxxand("ble")
|
pat cmi tle and $1==4 && $3==4 call cmitxxand("bge")
|
||||||
pat cmi teq and $1==4 && $3==4 call cmitxxand("beq")
|
pat cmi teq and $1==4 && $3==4 call cmitxxand("beq")
|
||||||
pat cmi tne and $1==4 && $3==4 call cmitxxand("bne")
|
pat cmi tne and $1==4 && $3==4 call cmitxxand("bne")
|
||||||
pat cmi tge and $1==4 && $3==4 call cmitxxand("bge")
|
pat cmi tge and $1==4 && $3==4 call cmitxxand("ble")
|
||||||
pat cmi tgt and $1==4 && $3==4 call cmitxxand("bgt")
|
pat cmi tgt and $1==4 && $3==4 call cmitxxand("blt")
|
||||||
|
|
||||||
pat cmi tlt ior $1==4 && $3==4 call cmitxxior("blt")
|
pat cmi tlt ior $1==4 && $3==4 call cmitxxior("ble")
|
||||||
pat cmi tle ior $1==4 && $3==4 call cmitxxior("ble")
|
pat cmi tle ior $1==4 && $3==4 call cmitxxior("blt")
|
||||||
pat cmi teq ior $1==4 && $3==4 call cmitxxior("beq")
|
pat cmi teq ior $1==4 && $3==4 call cmitxxior("bne")
|
||||||
pat cmi tne ior $1==4 && $3==4 call cmitxxior("bne")
|
pat cmi tne ior $1==4 && $3==4 call cmitxxior("beq")
|
||||||
pat cmi tge ior $1==4 && $3==4 call cmitxxior("bge")
|
pat cmi tge ior $1==4 && $3==4 call cmitxxior("bgt")
|
||||||
pat cmi tgt ior $1==4 && $3==4 call cmitxxior("bgt")
|
pat cmi tgt ior $1==4 && $3==4 call cmitxxior("bge")
|
||||||
|
|
||||||
pat tlt and $2==4 call txxand("bgt")
|
pat tlt and $2==4 call txxand("bgt")
|
||||||
pat tle and $2==4 call txxand("bge")
|
pat tle and $2==4 call txxand("bge")
|
||||||
|
@ -1808,12 +1846,12 @@ pat tne and $2==4 call txxand("bne")
|
||||||
pat tge and $2==4 call txxand("ble")
|
pat tge and $2==4 call txxand("ble")
|
||||||
pat tgt and $2==4 call txxand("blt")
|
pat tgt and $2==4 call txxand("blt")
|
||||||
|
|
||||||
pat tlt ior $2==4 call txxior("bgt")
|
pat tlt ior $2==4 call txxior("ble")
|
||||||
pat tle ior $2==4 call txxior("bge")
|
pat tle ior $2==4 call txxior("blt")
|
||||||
pat teq ior $2==4 call txxior("beq")
|
pat teq ior $2==4 call txxior("bne")
|
||||||
pat tne ior $2==4 call txxior("bne")
|
pat tne ior $2==4 call txxior("beq")
|
||||||
pat tge ior $2==4 call txxior("ble")
|
pat tge ior $2==4 call txxior("bgt")
|
||||||
pat tgt ior $2==4 call txxior("blt")
|
pat tgt ior $2==4 call txxior("bge")
|
||||||
|
|
||||||
pat cmi $1==4
|
pat cmi $1==4
|
||||||
with src4 REG
|
with src4 REG
|
||||||
|
@ -1826,10 +1864,10 @@ uses REG = {const4, 0}
|
||||||
gen cmpf %1, %2
|
gen cmpf %1, %2
|
||||||
beq {label, "1f"}
|
beq {label, "1f"}
|
||||||
bgt {label, "2f"}
|
bgt {label, "2f"}
|
||||||
movd {const4, 1}, %a
|
movqd {const4, 1}, %a
|
||||||
br {label, "1f"}
|
br {label, "1f"}
|
||||||
2:
|
2:
|
||||||
movd {const4, 0-1}, %a
|
movqd {const4, 0-1}, %a
|
||||||
1: yields %a
|
1: yields %a
|
||||||
|
|
||||||
pat cmf $1==8
|
pat cmf $1==8
|
||||||
|
@ -1838,10 +1876,10 @@ uses REG = {const4, 0}
|
||||||
gen cmpl %1, %2
|
gen cmpl %1, %2
|
||||||
beq {label, "1f"}
|
beq {label, "1f"}
|
||||||
bgt {label, "2f"}
|
bgt {label, "2f"}
|
||||||
movd {const4, 1}, %a
|
movqd {const4, 1}, %a
|
||||||
br {label, "1f"}
|
br {label, "1f"}
|
||||||
2:
|
2:
|
||||||
movd {const4, 0-1}, %a
|
movqd {const4, 0-1}, %a
|
||||||
1: yields %a
|
1: yields %a
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -1888,15 +1926,15 @@ with src4
|
||||||
gen cmpqd {const4, 0}, %1
|
gen cmpqd {const4, 0}, %1
|
||||||
sxx* %a yields %a
|
sxx* %a yields %a
|
||||||
|
|
||||||
pat tlt call txx("sgtd")
|
pat tlt call txx("sgtd")
|
||||||
pat tle call txx("sged")
|
pat tle call txx("sged")
|
||||||
pat teq call txx("seqd")
|
pat teq call txx("seqd")
|
||||||
pat tne call txx("sned")
|
pat tne call txx("sned")
|
||||||
pat tge call txx("sled")
|
pat tge call txx("sled")
|
||||||
pat tgt call txx("sltd")
|
pat tgt call txx("sltd")
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group13 : branch *
|
* Group13 : branch *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
proc bxx example beq
|
proc bxx example beq
|
||||||
|
@ -2001,7 +2039,7 @@ pat zge call zxx("ble")
|
||||||
pat zgt call zxx("blt")
|
pat zgt call zxx("blt")
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group14 : procedure call *
|
* Group14 : procedure call *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat cal
|
pat cal
|
||||||
|
@ -2036,7 +2074,7 @@ pat lfr $1==4 yields r0
|
||||||
pat lfr $1==8 yields r1 r0
|
pat lfr $1==8 yields r1 r0
|
||||||
|
|
||||||
/*****************************************************************
|
/*****************************************************************
|
||||||
* Group15 : miscellaneous *
|
* Group15 : miscellaneous *
|
||||||
*****************************************************************/
|
*****************************************************************/
|
||||||
|
|
||||||
pat asp
|
pat asp
|
||||||
|
@ -2053,26 +2091,26 @@ with const4 STACK
|
||||||
pat blm $1==0
|
pat blm $1==0
|
||||||
|
|
||||||
pat blm $1==4
|
pat blm $1==4
|
||||||
with REG REG
|
with tosdst4 tossrc4
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen move {regrel4, %2, 0}, {regrel4, %1, 0}
|
gen movd %2, %1
|
||||||
|
|
||||||
pat blm $1>4 && $1<=16
|
pat blm $1>4 && $1<=16
|
||||||
with REG REG
|
with REG REG
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen movmd %2, %1, {const4, $1}
|
gen movmd {regrel4, %2, 0}, {regrel4, %1, 0}, {const4, $1/4}
|
||||||
with exact addr_external addr_external
|
with exact addr_external addr_external
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen movmd {absolute4, %2.disp}, {absolute4, %1.disp}, {const4, $1}
|
gen movmd {absolute4, %2.disp}, {absolute4, %1.disp}, {const4, $1/4}
|
||||||
with exact addr_external addr_local
|
with exact addr_external addr_local
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen movmd {LOCAL, %2.ind}, {absolute4, %1.disp}, {const4, $1}
|
gen movmd {LOCAL, %2.ind}, {absolute4, %1.disp}, {const4, $1/4}
|
||||||
with exact addr_local addr_external
|
with exact addr_local addr_external
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen movmd {absolute4, %2.disp}, {LOCAL, %1.ind}, {const4, $1}
|
gen movmd {absolute4, %2.disp}, {LOCAL, %1.ind}, {const4, $1/4}
|
||||||
with exact addr_local addr_local
|
with exact addr_local addr_local
|
||||||
kills allmincon
|
kills allmincon
|
||||||
gen movmd {LOCAL, %2.ind}, {LOCAL, %1.ind}, {const4, $1}
|
gen movmd {LOCAL, %2.ind}, {LOCAL, %1.ind}, {const4, $1/4}
|
||||||
|
|
||||||
pat blm $1>16
|
pat blm $1>16
|
||||||
with REG REG
|
with REG REG
|
||||||
|
@ -2201,21 +2239,23 @@ uses REG
|
||||||
|
|
||||||
pat sim
|
pat sim
|
||||||
with src24
|
with src24
|
||||||
|
kills ALL
|
||||||
gen movw %1, {absolute2, ".ignmask"}
|
gen movw %1, {absolute2, ".ignmask"}
|
||||||
|
|
||||||
pat str $1==0
|
pat str $1==0
|
||||||
with src4
|
with src4 STACK
|
||||||
kills ALL
|
gen lprd fp, %1
|
||||||
gen sprd fp, %1
|
|
||||||
|
|
||||||
pat str $1==1
|
pat str $1==1
|
||||||
with src4
|
with src4 STACK
|
||||||
kills ALL
|
gen lprd sp, %1
|
||||||
gen sprd sp, %1
|
|
||||||
|
|
||||||
pat str $1==2
|
pat str $1==2
|
||||||
with src4
|
with src4
|
||||||
gen move %1, {absolute4, ".reghp"}
|
kills ALL
|
||||||
|
gen movd %1, {TOS}
|
||||||
|
jsr {absolute4, ".strhp"}
|
||||||
|
adjspd {const4, 0-4}
|
||||||
|
|
||||||
pat trp
|
pat trp
|
||||||
kills ALL
|
kills ALL
|
||||||
|
|
Loading…
Add table
Reference in a new issue