Remove INT32 and such. Adjust indentation.
I understand `loi 4` more easily than `loi INT32`, because `loi 4` appears in .e files. So remove INT8, INT16, INT32, INT64. Add a comment to explain r3 during unconditional jumps.
This commit is contained in:
parent
f96f918a29
commit
c964eeddba
|
@ -2,18 +2,12 @@ EM_WSIZE = 4
|
|||
EM_PSIZE = 4
|
||||
EM_BSIZE = 8 /* two words saved in call frame */
|
||||
|
||||
INT8 = 1 /* Size of values */
|
||||
INT16 = 2
|
||||
INT32 = 4
|
||||
INT64 = 8
|
||||
|
||||
FP_OFFSET = 0 /* Offset of saved FP relative to our FP */
|
||||
PC_OFFSET = 4 /* Offset of saved PC relative to our FP */
|
||||
|
||||
#define COMMENT(n) /* comment {LABEL, n} */
|
||||
|
||||
|
||||
#define nicesize(x) ((x)==INT8 || (x)==INT16 || (x)==INT32 || (x)==INT64)
|
||||
#define nicesize(x) ((x)==1 || (x)==2 || (x)==4 || (x)==8)
|
||||
|
||||
#define smalls(n) sfit(n, 16)
|
||||
#define smallu(n) ufit(n, 16)
|
||||
|
@ -1176,22 +1170,22 @@ PATTERNS
|
|||
pat loe /* Load word external */
|
||||
leaving
|
||||
lae $1
|
||||
loi INT32
|
||||
loi 4
|
||||
|
||||
pat ste /* Store word external */
|
||||
leaving
|
||||
lae $1
|
||||
sti INT32
|
||||
sti 4
|
||||
|
||||
pat lde /* Load double-word external */
|
||||
leaving
|
||||
lae $1
|
||||
loi INT64
|
||||
loi 8
|
||||
|
||||
pat sde /* Store double-word external */
|
||||
leaving
|
||||
lae $1
|
||||
sti INT64
|
||||
sti 8
|
||||
|
||||
pat zre /* Zero external */
|
||||
leaving
|
||||
|
@ -1216,27 +1210,27 @@ PATTERNS
|
|||
pat lof /* Load word offsetted */
|
||||
leaving
|
||||
adp $1
|
||||
loi INT32
|
||||
loi 4
|
||||
|
||||
pat ldf /* Load double-word offsetted */
|
||||
leaving
|
||||
adp $1
|
||||
loi INT64
|
||||
loi 8
|
||||
|
||||
pat stf /* Store word offsetted */
|
||||
leaving
|
||||
adp $1
|
||||
sti INT32
|
||||
sti 4
|
||||
|
||||
pat sdf /* Store double-word offsetted */
|
||||
leaving
|
||||
adp $1
|
||||
sti INT64
|
||||
sti 8
|
||||
|
||||
|
||||
/* Loads and stores */
|
||||
|
||||
pat loi $1==INT8 /* Load byte indirect */
|
||||
pat loi $1==1 /* Load byte indirect */
|
||||
with REG
|
||||
yields {IND_RC_B, %1, 0}
|
||||
with exact SUM_RC
|
||||
|
@ -1246,8 +1240,8 @@ PATTERNS
|
|||
with exact SUM_RR
|
||||
yields {IND_RR_B, %1.reg1, %1.reg2}
|
||||
|
||||
pat loi loc loc cii $1==INT16 && $2==INT16 && $3==INT32
|
||||
/* Load half-word indirect and sign extend */
|
||||
/* Load half-word indirect and sign-extend */
|
||||
pat loi loc loc cii $1==2 && $2==2 && $3==4
|
||||
with REG
|
||||
yields {IND_RC_H_S, %1, 0}
|
||||
with exact SUM_RC
|
||||
|
@ -1257,7 +1251,7 @@ PATTERNS
|
|||
with exact SUM_RR
|
||||
yields {IND_RR_H_S, %1.reg1, %1.reg2}
|
||||
|
||||
pat loi $1==INT16 /* Load half-word indirect */
|
||||
pat loi $1==2 /* Load half-word indirect */
|
||||
with REG
|
||||
yields {IND_RC_H, %1, 0}
|
||||
with exact SUM_RC
|
||||
|
@ -1267,7 +1261,7 @@ PATTERNS
|
|||
with exact SUM_RR
|
||||
yields {IND_RR_H, %1.reg1, %1.reg2}
|
||||
|
||||
pat loi $1==INT32 /* Load word indirect */
|
||||
pat loi $1==4 /* Load word indirect */
|
||||
with REG
|
||||
yields {IND_RC_W, %1, 0}
|
||||
with exact SUM_RC
|
||||
|
@ -1277,7 +1271,7 @@ PATTERNS
|
|||
with exact SUM_RR
|
||||
yields {IND_RR_W, %1.reg1, %1.reg2}
|
||||
|
||||
pat loi $1==INT64 /* Load double-word indirect */
|
||||
pat loi $1==8 /* Load double-word indirect */
|
||||
with REG
|
||||
yields {IND_RC_D, %1, 0}
|
||||
with exact SUM_RC
|
||||
|
@ -1295,10 +1289,9 @@ PATTERNS
|
|||
pat los $1==4 /* Load arbitrary size */
|
||||
with REG3 STACK
|
||||
kills ALL
|
||||
gen
|
||||
bl {LABEL, ".los4"}
|
||||
gen bl {LABEL, ".los4"}
|
||||
|
||||
pat sti $1==INT8 /* Store byte indirect */
|
||||
pat sti $1==1 /* Store byte indirect */
|
||||
with REG REG
|
||||
kills MEMORY
|
||||
gen move %2, {IND_RC_B, %1, 0}
|
||||
|
@ -1312,7 +1305,7 @@ PATTERNS
|
|||
kills MEMORY
|
||||
gen move %2, {IND_RR_B, %1.reg1, %1.reg2}
|
||||
|
||||
pat sti $1==INT16 /* Store half-word indirect */
|
||||
pat sti $1==2 /* Store half-word indirect */
|
||||
with REG REG
|
||||
kills MEMORY
|
||||
gen move %2, {IND_RC_H, %1, 0}
|
||||
|
@ -1326,7 +1319,7 @@ PATTERNS
|
|||
kills MEMORY
|
||||
gen move %2, {IND_RR_H, %1.reg1, %1.reg2}
|
||||
|
||||
pat sti $1==INT32 /* Store word indirect */
|
||||
pat sti $1==4 /* Store word indirect */
|
||||
with REG REG+FSREG
|
||||
kills MEMORY
|
||||
gen move %2, {IND_RC_W, %1, 0}
|
||||
|
@ -1340,7 +1333,7 @@ PATTERNS
|
|||
kills MEMORY
|
||||
gen move %2, {IND_RR_W, %1.reg1, %1.reg2}
|
||||
|
||||
pat sti $1==INT64 /* Store double-word indirect */
|
||||
pat sti $1==8 /* Store double-word indirect */
|
||||
with REG FREG
|
||||
kills MEMORY
|
||||
gen move %2, {IND_RC_D, %1, 0}
|
||||
|
@ -1367,8 +1360,7 @@ PATTERNS
|
|||
pat sts $1==4 /* Store arbitrary size */
|
||||
with REG3 STACK
|
||||
kills ALL
|
||||
gen
|
||||
bl {LABEL, ".sts4"}
|
||||
gen bl {LABEL, ".sts4"}
|
||||
|
||||
|
||||
/* Arithmetic wrappers */
|
||||
|
@ -1560,7 +1552,7 @@ PATTERNS
|
|||
leaving
|
||||
cal ".xor"
|
||||
|
||||
pat com $1==INT32 /* NOT word */
|
||||
pat com $1==4 /* NOT word */
|
||||
with exact AND_RR
|
||||
yields {NAND_RR, %1.reg1, %1.reg2}
|
||||
with exact OR_RR
|
||||
|
@ -1680,8 +1672,7 @@ PATTERNS
|
|||
/* Arrays */
|
||||
|
||||
pat aar $1==4 /* Address of array element */
|
||||
leaving
|
||||
cal ".aar4"
|
||||
leaving cal ".aar4"
|
||||
|
||||
pat lar $1==4 /* Load from array */
|
||||
with STACK
|
||||
|
@ -1993,7 +1984,7 @@ PATTERNS
|
|||
* puts gt in the sign bit, to reverse the comparison.
|
||||
*/
|
||||
|
||||
pat cmi $1==INT32 /* Signed tristate compare */
|
||||
pat cmi $1==4 /* Signed tristate compare */
|
||||
with REG CONST2
|
||||
uses reusing %1, REG={COND_RC, %1, %2.val}
|
||||
gen rlwinm %a, %a, {C, 1}, {C, 31}, {C, 0}
|
||||
|
@ -2007,7 +1998,7 @@ PATTERNS
|
|||
gen extlwi %a, %a, {C, 2}, {C, 0}
|
||||
yields %a
|
||||
|
||||
pat cmu $1==INT32 /* Unsigned tristate compare */
|
||||
pat cmu $1==4 /* Unsigned tristate compare */
|
||||
with REG UCONST2
|
||||
uses reusing %1, REG={CONDL_RC, %1, %2.val}
|
||||
gen rlwinm %a, %a, {C, 1}, {C, 31}, {C, 0}
|
||||
|
@ -2023,11 +2014,11 @@ PATTERNS
|
|||
|
||||
pat cmp /* Compare pointers */
|
||||
leaving
|
||||
cmu INT32
|
||||
cmu 4
|
||||
|
||||
pat cms $1==INT32 /* Compare blocks (word sized) */
|
||||
pat cms $1==4 /* Compare blocks (word sized) */
|
||||
leaving
|
||||
cmi INT32
|
||||
cmi 4
|
||||
|
||||
pat cms defined($1)
|
||||
leaving
|
||||
|
@ -2041,34 +2032,32 @@ PATTERNS
|
|||
|
||||
/* Other branching and labelling */
|
||||
|
||||
/* During an unconditional jump, if the top element on the
|
||||
* stack has 4 bytes, then we hold it in register r3.
|
||||
*/
|
||||
pat lab topeltsize($1)==4 && !fallthrough($1)
|
||||
kills ALL
|
||||
gen
|
||||
labeldef $1
|
||||
gen labeldef $1
|
||||
yields r3
|
||||
|
||||
pat lab topeltsize($1)==4 && fallthrough($1)
|
||||
with REG3 STACK
|
||||
kills ALL
|
||||
gen
|
||||
labeldef $1
|
||||
gen labeldef $1
|
||||
yields r3
|
||||
|
||||
pat lab topeltsize($1)!=4
|
||||
pat lab topeltsize($1)!=4 /* Label without r3 */
|
||||
with STACK
|
||||
kills ALL
|
||||
gen
|
||||
labeldef $1
|
||||
gen labeldef $1
|
||||
|
||||
pat bra topeltsize($1)==4 /* Unconditional jump with TOS GPRister */
|
||||
pat bra topeltsize($1)==4 /* Branch with r3 */
|
||||
with REG3 STACK
|
||||
gen
|
||||
b {LABEL, $1}
|
||||
gen b {LABEL, $1}
|
||||
|
||||
pat bra topeltsize($1)!=4 /* Unconditional jump without TOS GPRister */
|
||||
pat bra topeltsize($1)!=4 /* Branch without r3 */
|
||||
with STACK
|
||||
gen
|
||||
b {LABEL, $1}
|
||||
gen b {LABEL, $1}
|
||||
|
||||
|
||||
/* Miscellaneous */
|
||||
|
@ -2076,8 +2065,7 @@ PATTERNS
|
|||
pat cal /* Call procedure */
|
||||
with STACK
|
||||
kills ALL
|
||||
gen
|
||||
bl {LABEL, $1}
|
||||
gen bl {LABEL, $1}
|
||||
|
||||
pat cai /* Call procedure indirect */
|
||||
with REG STACK
|
||||
|
@ -2086,10 +2074,10 @@ PATTERNS
|
|||
mtspr ctr, %1
|
||||
bctrl.
|
||||
|
||||
pat lfr $1==INT32 /* Load function result, word */
|
||||
pat lfr $1==4 /* Load function result, word */
|
||||
yields r3
|
||||
|
||||
pat lfr $1==INT64 /* Load function result, double-word */
|
||||
pat lfr $1==8 /* Load function result, double-word */
|
||||
yields r4 r3
|
||||
|
||||
pat ret $1==0 /* Return from procedure */
|
||||
|
@ -2151,14 +2139,12 @@ PATTERNS
|
|||
pat csa /* Array-lookup switch */
|
||||
with STACK
|
||||
kills ALL
|
||||
gen
|
||||
b {LABEL, ".csa"}
|
||||
gen b {LABEL, ".csa"}
|
||||
|
||||
pat csb /* Table-lookup switch */
|
||||
with STACK
|
||||
kills ALL
|
||||
gen
|
||||
b {LABEL, ".csb"}
|
||||
gen b {LABEL, ".csb"}
|
||||
|
||||
|
||||
/* EM specials */
|
||||
|
@ -2174,30 +2160,24 @@ PATTERNS
|
|||
ste "hol0"
|
||||
|
||||
pat lni /* Increment line number */
|
||||
leaving
|
||||
ine "hol0"
|
||||
leaving ine "hol0"
|
||||
|
||||
pat lim /* Load EM trap ignore mask */
|
||||
leaving
|
||||
lde ".ignmask"
|
||||
leaving lde ".ignmask"
|
||||
|
||||
pat sim /* Store EM trap ignore mask */
|
||||
leaving
|
||||
ste ".ignmask"
|
||||
leaving ste ".ignmask"
|
||||
|
||||
pat trp /* Raise EM trap */
|
||||
with REG3
|
||||
kills ALL
|
||||
gen
|
||||
bl {LABEL, ".trap"}
|
||||
gen bl {LABEL, ".trap"}
|
||||
|
||||
pat sig /* Set trap handler */
|
||||
leaving
|
||||
ste ".trppc"
|
||||
leaving ste ".trppc"
|
||||
|
||||
pat rtt /* Return from trap */
|
||||
leaving
|
||||
ret 0
|
||||
leaving ret 0
|
||||
|
||||
/* Our caller's local base, "lxl 0 dch", appears in
|
||||
* lang/cem/libcc.ansi/setjmp/setjmp.e, lang/m2/libm2/par_misc.e
|
||||
|
@ -2210,8 +2190,7 @@ PATTERNS
|
|||
yields {IND_RC_W, %1, FP_OFFSET}
|
||||
|
||||
pat lpb /* LB -> argument base */
|
||||
leaving
|
||||
adp EM_BSIZE
|
||||
leaving adp EM_BSIZE
|
||||
|
||||
pat gto /* longjmp */
|
||||
with STACK
|
||||
|
@ -2253,15 +2232,14 @@ PATTERNS
|
|||
|
||||
/* Single-precision floating-point */
|
||||
|
||||
pat zrf $1==INT32 /* Push zero */
|
||||
pat zrf $1==4 /* Push zero */
|
||||
leaving
|
||||
loe ".fs_00000000"
|
||||
|
||||
pat adf $1==4 /* Add single */
|
||||
with FSREG FSREG
|
||||
uses reusing %1, FSREG
|
||||
gen
|
||||
fadds %a, %2, %1
|
||||
gen fadds %a, %2, %1
|
||||
yields %a
|
||||
pat adf stl $1==4 && inreg($2)==reg_float
|
||||
with FSREG FSREG
|
||||
|
@ -2270,8 +2248,7 @@ PATTERNS
|
|||
pat sbf $1==4 /* Subtract single */
|
||||
with FSREG FSREG
|
||||
uses reusing %1, FSREG
|
||||
gen
|
||||
fsubs %a, %2, %1
|
||||
gen fsubs %a, %2, %1
|
||||
yields %a
|
||||
pat sbf stl $1==4 && inreg($2)==reg_float
|
||||
with FSREG FSREG
|
||||
|
@ -2280,34 +2257,31 @@ PATTERNS
|
|||
pat mlf $1==4 /* Multiply single */
|
||||
with FSREG FSREG
|
||||
uses reusing %1, FSREG
|
||||
gen
|
||||
fmuls %a, %2, %1
|
||||
gen fmuls %a, %2, %1
|
||||
yields %a
|
||||
pat mlf stl $1==4 && inreg($2)==reg_float
|
||||
with FSREG FSREG
|
||||
gen fmuls {LOCAL, $2}, %2, %1
|
||||
|
||||
pat dvf $1==INT32 /* Divide single */
|
||||
pat dvf $1==4 /* Divide single */
|
||||
with FSREG FSREG
|
||||
uses reusing %1, FSREG
|
||||
gen
|
||||
fdivs %a, %2, %1
|
||||
gen fdivs %a, %2, %1
|
||||
yields %a
|
||||
pat dvf stl $1==4 && inreg($2)==reg_float
|
||||
with FSREG FSREG
|
||||
gen fdivs {LOCAL, $2}, %2, %1
|
||||
|
||||
pat ngf $1==INT32 /* Negate single */
|
||||
pat ngf $1==4 /* Negate single */
|
||||
with FSREG
|
||||
uses reusing %1, FSREG
|
||||
gen
|
||||
fneg %a, %1
|
||||
gen fneg %a, %1
|
||||
yields %a
|
||||
pat ngf stl $1==4 && inreg($2)==reg_float
|
||||
with FSREG
|
||||
gen fneg {LOCAL, $2}, %1
|
||||
|
||||
pat cmf $1==INT32 /* Compare single */
|
||||
pat cmf $1==4 /* Compare single */
|
||||
with FSREG FSREG
|
||||
uses REG={COND_FS, %2, %1}
|
||||
gen extlwi %a, %a, {C, 2}, {C, 0}
|
||||
|
@ -2358,12 +2332,11 @@ PATTERNS
|
|||
pat cmf zlt $1==4 call cmf4zxx("blt")
|
||||
pat cmf zle $1==4 call cmf4zxx("ble")
|
||||
|
||||
pat loc loc cff $1==INT32 && $2==INT64 /* Convert single to double */
|
||||
pat loc loc cff $1==4 && $2==8 /* Convert single to double */
|
||||
with FSREG
|
||||
yields %1.1
|
||||
|
||||
/* Convert single to signed int */
|
||||
pat loc loc cfi $1==4 && $2==4
|
||||
pat loc loc cfi $1==4 && $2==4 /* Single to signed int */
|
||||
leaving
|
||||
loc 4
|
||||
loc 8
|
||||
|
@ -2372,8 +2345,7 @@ PATTERNS
|
|||
loc 4
|
||||
cfi
|
||||
|
||||
/* Convert single to unsigned int */
|
||||
pat loc loc cfu $1==4 && $2==4
|
||||
pat loc loc cfu $1==4 && $2==4 /* Single to unsigned int */
|
||||
leaving
|
||||
loc 4
|
||||
loc 8
|
||||
|
@ -2382,8 +2354,7 @@ PATTERNS
|
|||
loc 4
|
||||
cfu
|
||||
|
||||
/* Convert signed int to single */
|
||||
pat loc loc cif $1==4 && $2==4
|
||||
pat loc loc cif $1==4 && $2==4 /* Signed int to single */
|
||||
leaving
|
||||
loc 4
|
||||
loc 8
|
||||
|
@ -2392,8 +2363,7 @@ PATTERNS
|
|||
loc 4
|
||||
cff
|
||||
|
||||
/* Convert unsigned int to single */
|
||||
pat loc loc cuf $1==4 && $2==4
|
||||
pat loc loc cuf $1==4 && $2==4 /* Unsigned int to single */
|
||||
leaving
|
||||
loc 4
|
||||
loc 8
|
||||
|
@ -2405,15 +2375,13 @@ PATTERNS
|
|||
|
||||
/* Double-precision floating-point */
|
||||
|
||||
pat zrf $1==INT64 /* Push zero */
|
||||
leaving
|
||||
lde ".fd_00000000"
|
||||
pat zrf $1==8 /* Push zero */
|
||||
leaving lde ".fd_00000000"
|
||||
|
||||
pat adf $1==8 /* Add double */
|
||||
with FREG FREG
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
fadd %a, %2, %1
|
||||
gen fadd %a, %2, %1
|
||||
yields %a
|
||||
pat adf sdl $1==8 && inreg($2)==reg_float
|
||||
with FREG FREG
|
||||
|
@ -2422,8 +2390,7 @@ PATTERNS
|
|||
pat sbf $1==8 /* Subtract double */
|
||||
with FREG FREG
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
fsub %a, %2, %1
|
||||
gen fsub %a, %2, %1
|
||||
yields %a
|
||||
pat sbf sdl $1==8 && inreg($2)==reg_float
|
||||
with FREG FREG
|
||||
|
@ -2432,8 +2399,7 @@ PATTERNS
|
|||
pat mlf $1==8 /* Multiply double */
|
||||
with FREG FREG
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
fmul %a, %2, %1
|
||||
gen fmul %a, %2, %1
|
||||
yields %a
|
||||
pat mlf sdl $1==8 && inreg($2)==reg_float
|
||||
with FREG FREG
|
||||
|
@ -2442,8 +2408,7 @@ PATTERNS
|
|||
pat dvf $1==8 /* Divide double */
|
||||
with FREG FREG
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
fdiv %a, %2, %1
|
||||
gen fdiv %a, %2, %1
|
||||
yields %a
|
||||
pat dvf sdl $1==8 && inreg($2)==reg_float
|
||||
with FREG FREG
|
||||
|
@ -2452,14 +2417,13 @@ PATTERNS
|
|||
pat ngf $1==8 /* Negate double */
|
||||
with FREG
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
fneg %a, %1
|
||||
gen fneg %a, %1
|
||||
yields %a
|
||||
pat ngf sdl $1==8 && inreg($2)==reg_float
|
||||
with FREG
|
||||
gen fneg {DLOCAL, $2}, %1
|
||||
|
||||
pat cmf $1==INT64 /* Compare double */
|
||||
pat cmf $1==8 /* Compare double */
|
||||
with FREG FREG
|
||||
uses REG={COND_FD, %2, %1}
|
||||
gen extlwi %a, %a, {C, 2}, {C, 0}
|
||||
|
@ -2521,8 +2485,7 @@ PATTERNS
|
|||
gen frsp %a, %1
|
||||
yields %a
|
||||
|
||||
/* Convert double to signed int */
|
||||
pat loc loc cfi $1==8 && $2==4
|
||||
pat loc loc cfi $1==8 && $2==4 /* Double to signed int */
|
||||
with FREG STACK
|
||||
uses reusing %1, FREG
|
||||
gen
|
||||
|
@ -2530,26 +2493,18 @@ PATTERNS
|
|||
stfdu %a, {IND_RC_D, sp, 0-8}
|
||||
addi sp, sp, {C, 4}
|
||||
|
||||
/* Convert double to unsigned int */
|
||||
pat loc loc cfu $1==8 && $2==4
|
||||
leaving
|
||||
cal ".cfu8"
|
||||
pat loc loc cfu $1==8 && $2==4 /* Double to unsigned int */
|
||||
leaving cal ".cfu8"
|
||||
|
||||
/* Convert signed int to double */
|
||||
pat loc loc cif $1==4 && $2==8
|
||||
leaving
|
||||
cal ".cif8"
|
||||
pat loc loc cif $1==4 && $2==8 /* Signed int to double */
|
||||
leaving cal ".cif8"
|
||||
|
||||
/* Convert unsigned int to double */
|
||||
pat loc loc cuf $1==4 && $2==8
|
||||
leaving
|
||||
cal ".cuf8"
|
||||
pat loc loc cuf $1==4 && $2==8 /* Unsigned int to double */
|
||||
leaving cal ".cuf8"
|
||||
|
||||
pat fef $1==8 /* Split fraction, exponent */
|
||||
leaving
|
||||
cal ".fef8"
|
||||
leaving cal ".fef8"
|
||||
|
||||
/* Multiply two doubles, then split fraction, integer */
|
||||
pat fif $1==8
|
||||
leaving
|
||||
cal ".fif8"
|
||||
leaving cal ".fif8"
|
||||
|
|
Loading…
Reference in a new issue