From: em Date: Fri, 18 Jan 1985 15:39:07 +0000 (+0000) Subject: Routines are now called with calls instead of jsb. We use ap as argument X-Git-Tag: release-5-5~5764 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=f9c86fc6f6372888c2b5373298fca79cc132c35f;p=ack.git Routines are now called with calls instead of jsb. We use ap as argument pointer register. EM_BSIZE is required to be a constant. --- diff --git a/mach/vax4/cg/table b/mach/vax4/cg/table index 0d7504b42..45ad60b3f 100644 --- a/mach/vax4/cg/table +++ b/mach/vax4/cg/table @@ -1,22 +1,16 @@ "$Header$" -#define SL 8 -#define SSL "8" -#define DL 0 -#define SDL "" - #define LOCLABS /* define if target assembler recognizes local labels */ #define REGVARS /* define for register variables */ - /*#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 NC nocoercions : +#define BSIZE 4 EM_PSIZE = 4 EM_WSIZE = 4 -#ifndef REGVARS -EM_BSIZE = SL -#endif REGVARS - -#define NC nocoercions : +EM_BSIZE = BSIZE /**************************************************************** * VAX 11 Back end table. * @@ -35,8 +29,9 @@ EM_BSIZE = SL ****************************************************************/ REGISTERS: +AP = ("ap",4),ArgumentPointer. LB = ("fp",4),LocaLBase. -R0 = ("r0",4),REG,RRET. +R0 = ("r0",4),REG. R1 = ("r1",4),REG. R2 = ("r2",4),REG. R3 = ("r3",4),REG. @@ -59,17 +54,21 @@ R9 = ("r9",4),REG. RA = ("r10",4),REG. RB = ("r11",4),REG. #endif REGVARS -QR0 = ("r0",8,R0,R1),QREG,QRET. +QR0 = ("r0",8,R0,R1),QREG. QR2 = ("r2",8,R2,R3),QREG. +#ifndef REGVARS QR4 = ("r4",8,R4,R5),QREG. QR6 = ("r6",8,R6,R7),QREG. QR8 = ("r8",8,R8,R9),QREG. QRA = ("r10",8,RA,RB),QREG. +#endif REGVARS QR1 = ("r1",8,R1,R2),QREG. +#ifndef REGVARS QR3 = ("r3",8,R3,R4),QREG. QR5 = ("r5",8,R5,R6),QREG. QR7 = ("r7",8,R7,R8),QREG. QR9 = ("r9",8,R9,RA),QREG. +#endif REGVARS TOKENS: @@ -79,11 +78,11 @@ CONST2 = {INT num;} 4 cost=(4,3) "$%[num]" CONST4 = {INT num;} 4 cost=(4,3) "$%[num]" CONST8 = {STRING ind;} 8 cost=(8,6) "$%[ind]" FCONST8 = {INT num;} 8 cost=(8,6) "$0f%[num].0" -LOCAL1 = {INT num,size;} 4 cost=(2,6) "%[num](fp)" -LOCAL2 = {INT num,size;} 4 cost=(2,6) "%[num](fp)" -LOCAL4 = {INT num,size;} 4 cost=(2,6) "%[num](fp)" -LOCAL8 = {INT num,size;} 8 cost=(2,6) "%[num](fp)" -ADDR_LOCAL = {INT num;} 4 cost=(2,6) "%[num](fp)" +LOCAL1 = {REGISTER reg; INT num,size;} 4 cost=(2,6) "%[num](%[reg])" +LOCAL2 = {REGISTER reg; INT num,size;} 4 cost=(2,6) "%[num](%[reg])" +LOCAL4 = {REGISTER reg; INT num,size;} 4 cost=(2,6) "%[num](%[reg])" +LOCAL8 = {REGISTER reg; INT num,size;} 8 cost=(2,9) "%[num](%[reg])" +ADDR_LOCAL = {REGISTER reg; INT num;} 4 cost=(2,6) "%[num](%[reg])" ADDR_EXTERNAL = {STRING ind;} 4 cost=(4,6) "%[ind]" EXTERNAL1 = {STRING ind;} 4 cost=(4,6) "%[ind]" EXTERNAL2 = {STRING ind;} 4 cost=(4,6) "%[ind]" @@ -188,7 +187,9 @@ source4 = REG + regdef4 + displ4 + displdef4 + LocaLBase + #ifdef REGVARS + RREG + reginc4 + regdec4 #endif REGVARS -noaddr4 = source4 - REG - displ4 - EXTERNAL4 +dups4 = CONST + regdef1 + displ1 + LOCAL1 + + REG + regdef2 + displ2 + LOCAL2 + + RREG + regdef4 + displ4 + LOCAL4 + DOUBLE source8 = QREG + regdef8 + displ8 + displdef8 + EXTERNAL8 + reldef8 + CONST8 + LOCAL8 + extind8 + displind8 + extdefind8 + displdefind8 @@ -198,7 +199,6 @@ source8 = QREG + regdef8 + displ8 + displdef8 + source1or2 = source1 + source2 source1or2or4 = source1or2 + source4 source2or4 = source2 + source4 -registers = QREG + REG nonexist1 = adispl + ADDR_EXTERNAL + ADDR_LOCAL aextind = aextind2 + aextind4 + aextind8 adisplind = adisplind1 + adisplind2 + adisplind4 + adisplind8 @@ -217,8 +217,8 @@ regch4 = reginc1 + regdec1 + reginc2 + regdec2 + reginc4 + regdec4 regch8 = reginc8 + regdec8 regch = regch4 + regch8 #endif REGVARS -displs = displ1 + displ2 + displ4 + displ8 - + regdef1 + regdef2 + regdef4 + regdef8 +displs = displ1 + displ2 + displ4 + displ8 + + regdef1 + regdef2 + regdef4 + regdef8 #ifdef REGVARS + regch #endif REGVARS @@ -235,19 +235,19 @@ displaced = displs + displdefs + reldefs externals = EXTERNALS + displaced + extinds extandloc = externals + LOCALS #ifdef REGVARS -reg4 = REG + RREG +reg4 = REG + RREG + LocaLBase reg8 = QREG #else REGVARS reg4 = REG reg8 = QREG #endif REGVARS sreg4 = REG * SCRATCH -nosreg4 = source4 - sreg4 sreg8 = QREG * SCRATCH -nosreg8 = source8 - sreg8 bigsource4 = source1or2or4 + nonexist bigsource8 = source8 + FCONST8 all = bigsource4 + bigsource8 +scr = ALL - (EXTERNALS + LOCALS + ADDR_LOCAL + ADDR_EXTERNAL + CONST + + DOUBLE) #ifdef REGVARS #define REMEXTANDLOC remove(externals) remove(LOCALS,inreg(%[num])==0) #define REMREG(x) remove(regch,%[reg]==regvar(x)) @@ -261,111 +261,105 @@ CODE: * Group 1 : Load instructions * ********************************/ -loc $1>=0 && $1<256 | | | {CONST1, $1} | | -loc $1>=256 && $1<65536 | | | {CONST2, $1} | | -loc | | | {CONST4, $1} | | -loc loc $1==0 && $2==0 | | | {FCONST8, 0} | | +loc $1>=0 && $1<256 | | | {CONST1,$1} | | +loc $1>=256 && $1<65536 | | | {CONST2,$1} | | +loc | | | {CONST4,$1} | | +loc loc $1==0 && $2==0 | | | {FCONST8,0} | | ldc | | | {CONST8,$1} | | #ifdef REGVARS lol inreg($1)==2 | | | regvar($1) | | #endif REGVARS -lol | | | {LOCAL4, $1, 4} | | -loe | | | {EXTERNAL4, $1} | | +lol $1 < 0 | | | {LOCAL4,LB,$1,4} | | +lol $1 >= 0 | | | {LOCAL4,AP,$1,4} | | +loe | | | {EXTERNAL4,$1} | | #ifdef REGVARS lil inreg($1)==2 | | REMREG($1) | {regdef4,regvar($1)} | | #endif REGVARS -lil | | | {displdef4,LB, tostring($1)} | | +lil $1 < 0 | | | {displdef4,LB,tostring($1)} | | +lil $1 >= 0 | | | {displdef4,AP,tostring($1)} | | lof | | | | adp $1 loi 4 | -lal | | | {ADDR_LOCAL, $1} | | -lae | | | {ADDR_EXTERNAL, $1} | | +lal $1 < 0 | | | {ADDR_LOCAL,LB,$1} | | +lal $1 >= 0 | | | {ADDR_LOCAL,AP,$1} | | +lae | | | {ADDR_EXTERNAL,$1} | | lxl $1==0 | | | LB | | -lxl $1>0 | | remove(ALL) +lxl $1==1 | | | {LOCAL4,AP,BSIZE,4} | | +lxl $1 > 1 | | remove(scr) move({CONST4,$1},R0) "jsb\t.lxl" erase(R0) | R0 | | -lxa | | remove(ALL) +lxa $1==0 | | | {ADDR_LOCAL,AP,BSIZE} | | +lxa $1==1 | | | {LOCAL4,AP,BSIZE,4} | lpb | +lxa $1 > 1 | | remove(scr) move({CONST4,$1},R0) "jsb\t.lxa" erase(R0) | R0 | | -loi $1==1 | NC adispl | - | {displ1,%[1.reg],%[1.ind]} | | -... | reg4 | | {regdef1,%[1]} | | -... | NC ADDR_LOCAL | | {LOCAL1, %[1.num],1} | | -... | displ4 | - | {displdef1,%[1.reg],%[1.ind]} | | -... | NC LOCAL4 | - | {displdef1, LB, tostring(%[1.num])} | | -... | NC ADDR_EXTERNAL | - | {EXTERNAL1,%[1.ind]} | | -... | NC EXTERNAL4 | - | {reldef1,%[1.ind]} | | +loi $1==1 | NC adispl | | {displ1,%[1.reg],%[1.ind]} | | +... | NC ADDR_LOCAL | | {LOCAL1,%[1.reg],%[1.num],1} | | +... | NC LOCAL4 | | {displdef1,%[1.reg],tostring(%[1.num])} | | +... | NC regdef4 | | {displdef1,%[1.reg],"0"} | | +... | NC displ4 | | {displdef1,%[1.reg],%[1.ind]} | | +... | NC ADDR_EXTERNAL | | {EXTERNAL1,%[1.ind]} | | +... | NC EXTERNAL4 | | {reldef1,%[1.ind]} | | ... | NC adisplind1 | | {displind1,%[1.ireg],%[1.reg],%[1.ind]} | | ... | NC aextdefind1 | | {extdefind1,%[1.ireg],%[1.ind]} | | ... | NC adispldefind1 | | {displdefind1,%[1.ireg],%[1.reg],%[1.ind]} | | -loi $1==2 | NC adispl | - | {displ2,%[1.reg],%[1.ind]} | | -... | reg4 | | {regdef2,%[1]} | | -... | NC ADDR_LOCAL | | {LOCAL2, %[1.num],2} | | -... | displ4 | - | {displdef2,%[1.reg],%[1.ind]} | | -... | NC ADDR_EXTERNAL | - | {EXTERNAL2,%[1.ind]} | | -... | NC EXTERNAL4 | - | {reldef2,%[1.ind]} | | -... | NC aextind2 | - | {extind2,%[1.ireg],%[1.ind]} | | +... | reg4 | | {regdef1,%[1]} | | +loi $1==2 | NC adispl | | {displ2,%[1.reg],%[1.ind]} | | +... | NC ADDR_LOCAL | | {LOCAL2,%[1.reg],%[1.num],2} | | +... | NC LOCAL4 | | {displdef2,%[1.reg],tostring(%[1.num])} | | +... | NC regdef4 | | {displdef2,%[1.reg],"0"} | | +... | NC displ4 | | {displdef2,%[1.reg],%[1.ind]} | | +... | NC ADDR_EXTERNAL | | {EXTERNAL2,%[1.ind]} | | +... | NC EXTERNAL4 | | {reldef2,%[1.ind]} | | +... | NC aextind2 | | {extind2,%[1.ireg],%[1.ind]} | | ... | NC adisplind2 | | {displind2,%[1.ireg],%[1.reg],%[1.ind]} | | ... | NC aextdefind2 | | {extdefind2,%[1.ireg],%[1.ind]} | | ... | NC adispldefind2 | | {displdefind2,%[1.ireg],%[1.reg],%[1.ind]} | | -loi $1==4 | NC adispl | - | {displ4,%[1.reg],%[1.ind]} | | -... | reg4 | | {regdef4,%[1]} | | -... | NC ADDR_LOCAL | | {LOCAL4, %[1.num],4} | | -... | displ4 | - | {displdef4,%[1.reg],%[1.ind]} | | -... | NC ADDR_EXTERNAL | - | {EXTERNAL4,%[1.ind]} | | -... | NC EXTERNAL4 | - | {reldef4,%[1.ind]} | | -... | NC aextind4 | - | {extind4,%[1.ireg],%[1.ind]} | | +... | reg4 | | {regdef2,%[1]} | | +loi $1==4 | NC adispl | | {displ4,%[1.reg],%[1.ind]} | | +... | NC ADDR_LOCAL | | {LOCAL4,%[1.reg],%[1.num],4} | | +... | NC LOCAL4 | | {displdef4,%[1.reg],tostring(%[1.num])} | | +... | NC regdef4 | | {displdef4,%[1.reg],"0"} | | +... | NC displ4 | | {displdef4,%[1.reg],%[1.ind]} | | +... | NC ADDR_EXTERNAL | | {EXTERNAL4,%[1.ind]} | | +... | NC EXTERNAL4 | | {reldef4,%[1.ind]} | | +... | NC aextind4 | | {extind4,%[1.ireg],%[1.ind]} | | ... | NC adisplind4 | | {displind4,%[1.ireg],%[1.reg],%[1.ind]} | | ... | NC aextdefind4 | | {extdefind4,%[1.ireg],%[1.ind]} | | ... | NC adispldefind4 | | {displdefind4,%[1.ireg],%[1.reg],%[1.ind]} | | -loi $1==8 | NC adispl | - | {displ8,%[1.reg],%[1.ind]} | | -... | reg4 | | {regdef8,%[1]} | | -... | NC ADDR_LOCAL | | {LOCAL8, %[1.num],8} | | -... | displ4 | - | {displdef8,%[1.reg],%[1.ind]} | | -... | NC ADDR_EXTERNAL | - | {EXTERNAL8,%[1.ind]} | | -... | NC EXTERNAL4 | - | {reldef8,%[1.ind]} | | -... | NC aextind8 | - | {extind8,%[1.ireg],%[1.ind]} | | +... | reg4 | | {regdef4,%[1]} | | +loi $1==8 | NC adispl | | {displ8,%[1.reg],%[1.ind]} | | +... | NC ADDR_LOCAL | | {LOCAL8,%[1.reg],%[1.num],8} | | +... | NC LOCAL4 | | {displdef8,%[1.reg],tostring(%[1.num])} | | +... | NC regdef4 | | {displdef8,%[1.reg],"0"} | | +... | NC displ4 | | {displdef8,%[1.reg],%[1.ind]} | | +... | NC ADDR_EXTERNAL | | {EXTERNAL8,%[1.ind]} | | +... | NC EXTERNAL4 | | {reldef8,%[1.ind]} | | +... | NC aextind8 | | {extind8,%[1.ireg],%[1.ind]} | | ... | NC adisplind8 | | {displind8,%[1.ireg],%[1.reg],%[1.ind]} | | ... | NC aextdefind8 | | {extdefind8,%[1.ireg],%[1.ind]} | | ... | NC adispldefind8 | | {displdefind8,%[1.ireg],%[1.reg],%[1.ind]} | | +... | reg4 | | {regdef8,%[1]} | | loi $1>8 && $1<=16 - | reg4 | | {displ8,%[1],tostring($1-8)} %[1] | loi $1-8 | ... | NC ADDR_EXTERNAL | | {EXTERNAL8,%[1.ind]+"+"+tostring($1-8)} %[1] | loi $1-8 | ... | NC ADDR_LOCAL | - | {LOCAL8,%[1.num]+$1-8,8} %[1] | loi $1-8 | + | {LOCAL8,%[1.reg],%[1.num]+$1-8,8} %[1] + | loi $1-8 | + | reg4 | | {displ8,%[1],tostring($1-8)} %[1] | loi $1-8 | loi | sreg4 | remove(ALL) allocate(REG={CONST4,$1/4}) @@ -378,7 +372,7 @@ loi | sreg4 | "sobgtr\t%[a],.-3" #endif erase(%[a]) | | | -los $1==4 | | remove(ALL) +los $1==4 | STACK | move({CONST1,4},R0) "jsb\t.los" erase(R0) | | | @@ -387,10 +381,11 @@ los !defined($1) | source1or2or4 | move(%[1],R0) "jsb\t.los" erase(R0) | | | -ldl | | | {LOCAL8, $1, 8} | | -lde | | | {EXTERNAL8, $1} | | +ldl $1<0 | | | {LOCAL8,LB,$1,8} | | +ldl $1>=0 | | | {LOCAL8,AP,$1,8} | | +lde | | | {EXTERNAL8,$1} | | ldf | | | | adp $1 loi 8 | -lpi | | | {ADDR_EXTERNAL, $1} | | +lpi | | | {ADDR_EXTERNAL,$1} | | /******************************** * Group 2 : Store instructions * @@ -400,35 +395,46 @@ lpi | | | {ADDR_EXTERNAL, $1} | | stl inreg($1)==2 | NC bigsource4 | remove(regvar($1)) move(%[1],regvar($1)) | | | -... | | remove(ALL) +... | STACK | "movl\t(sp)+,%(regvar($1)%)" | | | (3,7) #endif REGVARS -stl | NC bigsource4 | +stl $1 < 0 | NC bigsource4 | remove(displaced) - remove(LOCALS, %[num] <= $1+3 && %[num]+%[size] > $1) - move(%[1], {LOCAL4,$1, 4}) | | | -... | | remove(ALL) + remove(LOCALS,%[num] <= $1+3 && %[num]+%[size] > $1) + move(%[1],{LOCAL4,LB,$1,4}) | | | +... | STACK | "movl\t(sp)+,$1(fp)" | | | (5,14) +stl $1 >= 0 | NC bigsource4 | + remove(displaced) + remove(LOCALS,%[num] <= $1+3 && %[num]+%[size] > $1) + move(%[1],{LOCAL4,AP,$1,4}) | | | +... | STACK | + "movl\t(sp)+,$1(ap)" | | | (5,14) ste | NC bigsource4 | remove(externals) - move(%[1],{EXTERNAL4, $1}) | | | -... | | remove(ALL) + move(%[1],{EXTERNAL4,$1}) | | | +... | STACK | "movl\t(sp)+,$1" | | | (7,14) #ifdef REGVARS sil inreg($1)==2 | NC bigsource4 | REMEXTANDLOC move(%[1],{regdef4,regvar($1)}) | | | -... | | remove(ALL) +... | STACK | "movl\t(sp)+,(%(regvar($1)%))" | | | (3,10) #endif REGVARS -sil | NC bigsource4 | +sil $1 < 0 | NC bigsource4 | REMEXTANDLOC - move(%[1],{displdef4,LB, tostring($1)}) | | | -... | | remove(ALL) + move(%[1],{displdef4,LB,tostring($1)}) | | | +... | STACK | "movl\t(sp)+,*$1(fp)" | | | (5,17) +sil $1 >= 0 | NC bigsource4 | + REMEXTANDLOC + move(%[1],{displdef4,AP,tostring($1)}) | | | +... | STACK | + "movl\t(sp)+,*$1(ap)" | | | (5,17) stf | | | | adp $1 sti 4 | /*** C-problem: f(c) char c; { - write(1, &c, 1); + write(1,&c,1); } You don't know where the character is put in the word, so the CEM-compiler generates: (shorts analogously) @@ -442,13 +448,8 @@ sti $1==1 | NC adispl source1or2or4 | remove(displaced) remove(LOCALS, %[num]<=%[1.num] && %[num]+%[size]>%[1.num]) - move(%[2],{LOCAL1,%[1.num],1}) | | | -... | NC ADDR_LOCAL STACK | - "cvtlb\t(sp)+,%[1]" | | | (3,7)+%[1] -... | reg4 source1or2or4 | - REMEXTANDLOC - move(%[2],{regdef1,%[1]}) | | | -... | displ4 source1or2or4 | + move(%[2],{LOCAL1,%[1.reg],%[1.num],1}) | | | +... | NC displ4 source1or2or4 | REMEXTANDLOC move(%[2],{displdef1,%[1.reg],%[1.ind]}) | | | ... | NC ADDR_EXTERNAL source1or2or4 | @@ -468,18 +469,20 @@ sti $1==1 | NC adispl source1or2or4 | REMEXTANDLOC move(%[2],{displdefind1,%[1.ireg],%[1.reg],%[1.ind]}) | | | +... | reg4 source1or2or4 | + REMEXTANDLOC + move(%[2],{regdef1,%[1]}) | | | +... | NC nonexist1+aind1 STACK | + "cvtlb\t(sp)+,%[1]" | | | (3,7)+%[1] sti $1==2 | NC adispl source1or2or4 | REMEXTANDLOC move(%[2],{displ2,%[1.reg],%[1.ind]}) | | | -... | reg4 source1or2or4 | - REMEXTANDLOC - move(%[2],{regdef2,%[1]}) | | | ... | NC ADDR_LOCAL source1or2or4 | remove(displaced) remove(LOCALS, %[num]<=%[1.num] && %[num]+%[size]>%[1.num]) - move(%[2],{LOCAL2,%[1.num],2}) | | | -... | displ4 source1or2or4 | + move(%[2],{LOCAL2,%[1.reg],%[1.num],2}) | | | +... | NC displ4 source1or2or4 | REMEXTANDLOC move(%[2],{displdef2,%[1.reg],%[1.ind]}) | | | ... | NC ADDR_EXTERNAL source1or2or4 | @@ -501,18 +504,21 @@ sti $1==2 | NC adispl source1or2or4 | REMEXTANDLOC move(%[2],{displdefind2,%[1.ireg],%[1.reg],%[1.ind]}) | | | +... | reg4 source1or2or4 | + REMEXTANDLOC + move(%[2],{regdef2,%[1]}) | | | sti $1==4 | NC adispl bigsource4 | REMEXTANDLOC move(%[2],{displ4,%[1.reg],%[1.ind]}) | | | ... | NC ADDR_LOCAL | | | stl %[1.num] | ... | NC ADDR_EXTERNAL | | | ste %[1.ind] | -... | adispl | - remove(ALL) - "movl\t(sp)+,%[1]" | | | (3,7)+%[1] -... | reg4 bigsource4 | +... | NC LOCAL4 bigsource4 | REMEXTANDLOC - move(%[2],{regdef4,%[1]}) | | | -... | displ4 bigsource4 | + move(%[2],{displdef4,%[1.reg],tostring(%[1.num])} | | | +... | NC regdef4 bigsource4 | + REMEXTANDLOC + move(%[2],{displdef4,%[1.reg],"0"} | | | +... | NC displ4 bigsource4 | REMEXTANDLOC move(%[2],{displdef4,%[1.reg],%[1.ind]}) | | | ... | NC EXTERNAL4 bigsource4 | @@ -531,17 +537,27 @@ sti $1==4 | NC adispl bigsource4 | REMEXTANDLOC move(%[2],{displdefind4,%[1.ireg],%[1.reg],%[1.ind]}) | | | +... | NC nonexist1+aind4 STACK | + "movl\t(sp)+,%[1]" | | | (3,7)+%[1] +... | reg4 bigsource4 | + REMEXTANDLOC + move(%[2],{regdef4,%[1]}) | | | +... | reg4 STACK | + "movl\t(sp)+,(%[1])" | | | (3,10) sti $1==8 | NC adispl bigsource8 | REMEXTANDLOC move(%[2],{displ8,%[1.reg],%[1.ind]}) | | | ... | NC ADDR_LOCAL | | | sdl %[1.num] | ... | NC ADDR_EXTERNAL | | | sde %[1.ind] | -... | reg4 bigsource8 | - REMEXTANDLOC - move(%[2],{regdef8,%[1]}) | | | -... | displ4 bigsource8 | +... | NC displ4 bigsource8 | REMEXTANDLOC move(%[2],{displdef8,%[1.reg],%[1.ind]}) | | | +... | NC LOCAL4 bigsource8 | + REMEXTANDLOC + move(%[2],{displdef8,%[1.reg],tostring(%[1.num])} | | | +... | NC regdef4 bigsource8 | + REMEXTANDLOC + move(%[2],{displdef8,%[1.reg],"0"} | | | ... | NC EXTERNAL4 bigsource8 | REMEXTANDLOC move(%[2],{reldef8,%[1.ind]}) | | | @@ -558,9 +574,12 @@ sti $1==8 | NC adispl bigsource8 | REMEXTANDLOC move(%[2],{displdefind8,%[1.ireg],%[1.reg],%[1.ind]}) | | | +... | reg4 bigsource8 | + REMEXTANDLOC + move(%[2],{regdef8,%[1]}) | | | sti | sreg4 | remove(ALL) - allocate(REG={CONST4, $1/4}) + allocate(REG={CONST4,$1/4}) #ifdef LOCLABS "1:\nmovl\t(sp)+,(%[1])+" "sobgtr\t%[a],1b" @@ -578,25 +597,36 @@ sts !defined($1) | source4 | move(%[1],R0) "jsb\t.sts" erase(R0) | | | -sdl | NC bigsource8 | +sdl $1 < 0 | NC bigsource8 | remove(displaced) - remove(LOCALS, %[num]<=$1+7 && %[num]+%[size]>$1) - move(%[1],{LOCAL8,$1, 8}) | | | + remove(LOCALS,%[num]<=$1+7 && %[num]+%[size]>$1) + move(%[1],{LOCAL8,LB,$1,8}) | | | ... | NC bigsource4 bigsource4 | remove(displaced) - remove(LOCALS, %[num]<=$1+7 && %[num]+%[size]>$1) - move(%[1], {LOCAL4,$1,4}) - move(%[2], {LOCAL4,$1+4,4}) | | | -... | | remove(ALL) + remove(LOCALS,%[num]<=$1+7 && %[num]+%[size]>$1) + move(%[1],{LOCAL4,LB,$1,4}) + move(%[2],{LOCAL4,LB,$1+4,4}) | | | +... | STACK | "movq\t(sp)+,$1(fp)" | | | (5,14) +sdl $1 >= 0 | NC bigsource8 | + remove(displaced) + remove(LOCALS,%[num]<=$1+7 && %[num]+%[size]>$1) + move(%[1],{LOCAL8,AP,$1,8}) | | | +... | NC bigsource4 bigsource4 | + remove(displaced) + remove(LOCALS,%[num]<=$1+7 && %[num]+%[size]>$1) + move(%[1],{LOCAL4,AP,$1,4}) + move(%[2],{LOCAL4,AP,$1+4,4}) | | | +... | STACK | + "movq\t(sp)+,$1(ap)" | | | (5,14) sde | NC bigsource8 | remove(externals) - move(%[1], {EXTERNAL8, $1}) | | | + move(%[1],{EXTERNAL8,$1}) | | | ... | bigsource4 bigsource4 | remove(externals) - move(%[1], {EXTERNAL4, $1}) - move(%[2], {EXTERNAL4, $1+"+4"}) | | | -... | | remove(ALL) + move(%[1],{EXTERNAL4,$1}) + move(%[2],{EXTERNAL4,$1+"+4"}) | | | +... | STACK | "movq\t(sp)+,$1" | | | (7,14) sdf | | | | adp $1 sti 8 | @@ -612,7 +642,7 @@ adi $1==4 | source4 sreg4 | "addl2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,4) + %[2] -... | NC nosreg4 nosreg4 | +... | source4 source4 | allocate(%[1],%[2],REG) "addl3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] @@ -624,11 +654,18 @@ adi stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -adi stl $1==4 | source4 source4 | +adi stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, %[num]<=$2+3 && %[num]+%[size]>$2) + remove(LOCALS,%[num]<=$2+3 && %[num]+%[size]>$2) "addl3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +adi stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,%[num]<=$2+3 && %[num]+%[size]>$2) + "addl3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS adi sil $1==4 && inreg($2)==2 | source4 source4 | @@ -636,10 +673,16 @@ adi sil $1==4 && inreg($2)==2 "addl3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -adi sil $1==4 | source4 source4 | +adi sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "addl3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +adi sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "addl3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | adi ste $1==4 | source4 source4 | remove(externals) "addl3\t%[1],%[2],$2" @@ -652,7 +695,7 @@ sbi $1==4 | source4 sreg4 | "subl2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,4) + %[1] -... | NC source4 nosreg4 | +... | source4 source4 | allocate(%[1],%[2],REG) "subl3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] @@ -664,11 +707,18 @@ sbi stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -sbi stl $1==4 | source4 source4 | +sbi stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "subl3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +sbi stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "subl3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS sbi sil $1==4 && inreg($2)==2 | source4 source4 | @@ -676,10 +726,16 @@ sbi sil $1==4 && inreg($2)==2 "subl3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -sbi sil $1==4 | source4 source4 | +sbi sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "subl3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +sbi sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "subl3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | sbi ste $1==4 | source4 source4 | remove(externals) "subl3\t%[1],%[2],$2" @@ -696,10 +752,10 @@ mli $1==4 | source4 sreg4 | "mull2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,16) + %[2] -... | NC nosreg4 nosreg4 | +... | source4 source4 | allocate(%[1],%[2],REG) "mull3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,16)+%[1]+%[2] + setcc(%[a]) | %[a] | | (4,16)+%[1]+%[2] #ifdef REGVARS mli stl $1==4 && inreg($2)==2 | source4 source4 | @@ -708,11 +764,18 @@ mli stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -mli stl $1==4 | source4 source4 | +mli stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "mull3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +mli stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "mull3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS mli sil $1==4 && inreg($2)==2 | source4 source4 | @@ -720,10 +783,16 @@ mli sil $1==4 && inreg($2)==2 "mull3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -mli sil $1==4 | source4 source4 | +mli sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "mull3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +mli sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "mull3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | mli ste $1==4 | source4 source4 | remove(externals) "mull3\t%[1],%[2],$2" @@ -736,7 +805,7 @@ dvi $1==4 | source4 sreg4 | "divl2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,98) + %[1] -... | NC source4 nosreg4 | +... | source4 source4 | allocate(%[1],%[2],REG) "divl3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,98)+%[1]+%[2] @@ -748,11 +817,18 @@ dvi stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -dvi stl $1==4 | source4 source4 | +dvi stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "divl3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +dvi stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "divl3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS dvi sil $1==4 && inreg($2)==2 | source4 source4 | @@ -760,10 +836,16 @@ dvi sil $1==4 && inreg($2)==2 "divl3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -dvi sil $1==4 | source4 source4 | +dvi sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "divl3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +dvi sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "divl3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | dvi ste $1==4 | source4 source4 | remove(externals) "divl3\t%[1],%[2],$2" @@ -789,14 +871,24 @@ rmi stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -rmi stl $1==4 | source4 source4 | +rmi stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num]<=$2+3 && %[num]+%[size]>$2)) + remove(LOCALS,(%[num]<=$2+3 && %[num]+%[size]>$2)) allocate(REG) "divl3\t%[1],%[2],%[a]" "mull2\t%[1],%[a]" "subl3\t%[a],%[2],$2(fp)" - setcc({LOCAL4, $2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +rmi stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num]<=$2+3 && %[num]+%[size]>$2)) + allocate(REG) + "divl3\t%[1],%[2],%[a]" + "mull2\t%[1],%[a]" + "subl3\t%[a],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS rmi sil $1==4 && inreg($2)==2 | source4 source4 | @@ -807,20 +899,29 @@ rmi sil $1==4 && inreg($2)==2 "subl3\t%[a],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -rmi sil $1==4 | source4 source4 | +rmi sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC allocate(REG) "divl3\t%[1],%[2],%[a]" "mull2\t%[1],%[a]" "subl3\t%[a],%[2],*$2(fp)" - setcc({displdef4, LB, tostring($2)}) | | | + setcc({displdef4,LB,tostring($2)}) | | | +rmi sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + allocate(REG) + "divl3\t%[1],%[2],%[a]" + "mull2\t%[1],%[a]" + "subl3\t%[a],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | rmi ste $1==4 | source4 source4 | remove(externals) allocate(REG) "divl3\t%[1],%[2],%[a]" "mull2\t%[1],%[a]" "subl3\t%[a],%[2],$2" - setcc({EXTERNAL4, $2}) | | | + setcc({EXTERNAL4,$2}) | | | rmi !defined($1) | source4 | remove(ALL) move(%[1],R0) @@ -838,11 +939,18 @@ ngi stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -ngi stl $1==4 | source4 | +ngi stl $1==4 && $2<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "mnegl\t%[1],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +ngi stl $1==4 && $2>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "mnegl\t%[1],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS ngi sil $1==4 && inreg($2)==2 | source4 | @@ -850,10 +958,16 @@ ngi sil $1==4 && inreg($2)==2 "mnegl\t%[1],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -ngi sil $1==4 | source4 | +ngi sil $1==4 && $2<0 + | source4 | REMEXTANDLOC "mnegl\t%[1],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +ngi sil $1==4 && $2>=0 + | source4 | + REMEXTANDLOC + "mnegl\t%[1],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | ngi ste $1==4 | source4 | remove(externals) "mnegl\t%[1],$2" @@ -874,11 +988,18 @@ sli stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -sli stl $1==4 | source4 source4 | +sli stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "ashl\t%[1],%[2],$2(fp)" - setcc({LOCAL4, $2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +sli stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "ashl\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS sli sil $1==4 && inreg($2)==2 | source4 source4 | @@ -886,20 +1007,26 @@ sli sil $1==4 && inreg($2)==2 "ashl\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -sli sil $1==4 | source4 source4 | +sli sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "ashl\t%[1],%[2],*$2(fp)" - setcc({displdef4, LB, tostring($2)}) | | | + setcc({displdef4,LB,tostring($2)}) | | | +sli sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "ashl\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | sli ste $1==4 | source4 source4 | remove(externals) "ashl\t%[1],%[2],$2" - setcc({EXTERNAL4, $2}) | | | (8,10)+%[1]+%[2] + setcc({EXTERNAL4,$2}) | | | (8,10)+%[1]+%[2] sli !defined($1) | source4 | remove(ALL) move(%[1],R0) "jsb\t.sli" erase(R0) | | | -sri $1==4 | source4-CONST source4 | +sri $1==4 | source4 source4 | allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],%[a]" @@ -910,66 +1037,94 @@ sri $1==4 | source4-CONST source4 | setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] #ifdef REGVARS sri stl $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | remove(regvar($2)) - allocate(%[1], REG) + allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | (9,14)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | remove(regvar($2)) "ashl\t$$%(0-%[1.num]%),%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | (6,10)+%[1]+%[2] #endif REGVARS -sri stl $1==4 | source4-CONST source4 | +sri stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) - allocate(%[1], REG) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],$2(fp)" - setcc({LOCAL4, $2, 4}) | | | (9,11)+%[1]+%[2] -... | CONST source4 | + setcc({LOCAL4,LB,$2,4}) | | | (9,11)+%[1]+%[2] +... | NC CONST source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "ashl\t$$%(0-%[1.num]%),%[2],$2(fp)" - setcc({LOCAL4, $2, 4}) | | | (6,7)+%[1]+%[2] + setcc({LOCAL4,LB,$2,4}) | | | (6,7)+%[1]+%[2] +sri stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + allocate(%[1],REG) + "mnegl\t%[1],%[a]" + "ashl\t%[a],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | (9,11)+%[1]+%[2] +... | NC CONST source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "ashl\t$$%(0-%[1.num]%),%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | (6,7)+%[1]+%[2] #ifdef REGVARS sri sil $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | REMEXTANDLOC - allocate(%[1], REG) + allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | (9,14)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "ashl\t$$%(0-%[1.num]%),%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | (6,10)+%[1]+%[2] #endif REGVARS -sri sil $1==4 | source4-CONST source4 | +sri sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC - allocate(%[1], REG) + allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],*$2(fp)" - setcc({displdef4, LB, tostring($2)}) + setcc({displdef4,LB,tostring($2)}) | | | (9,17)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "ashl\t$$%(0-%[1.num]%),%[2],*$2(fp)" - setcc({displdef4, LB, tostring($2)}) + setcc({displdef4,LB,tostring($2)}) | | | (6,13)+%[1]+%[2] -sri ste $1==4 | source4-CONST source4 | +sri sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + allocate(%[1],REG) + "mnegl\t%[1],%[a]" + "ashl\t%[a],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) + | | | (9,17)+%[1]+%[2] +... | NC CONST source4 | + REMEXTANDLOC + "ashl\t$$%(0-%[1.num]%),%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) + | | | (6,13)+%[1]+%[2] +sri ste $1==4 | source4 source4 | remove(externals) - allocate(%[1], REG) + allocate(%[1],REG) "mnegl\t%[1],%[a]" "ashl\t%[a],%[2],$2" - setcc({EXTERNAL4, $2}) | | | (11,14)+%[1]+%[2] -... | CONST source4 | + setcc({EXTERNAL4,$2}) | | | (11,14)+%[1]+%[2] +... | NC CONST source4 | remove(externals) "ashl\t$$%(0-%[1.num]%),%[2],$2" - setcc({EXTERNAL4, $2}) | | | (8,10)+%[1]+%[2] + setcc({EXTERNAL4,$2}) | | | (8,10)+%[1]+%[2] sri !defined($1) | source4 | remove(ALL) move(%[1],R0) @@ -983,14 +1138,14 @@ sri !defined($1) | source4 | adu | | | | adi $1 | sbu | | | | sbi $1 | mlu | | | | mli $1 | -dvu $1==4 | | remove(ALL) +dvu $1==4 | STACK | "jsb\t.dvu4" | R0 | | dvu !defined($1) | source1or2or4 | remove(ALL) move(%[1],R0) "jsb\t.dvu" erase(R0) | | | -rmu $1==4 | | remove(ALL) +rmu $1==4 | STACK | "jsb\t.rmu4" | R0 | | rmu !defined($1) | source1or2or4 | remove(ALL) @@ -998,7 +1153,7 @@ rmu !defined($1) | source1or2or4 | "jsb\t.rmu" erase(R0) | | | slu | | | | sli $1 | -sru $1==4 | source4-CONST source4 | +sru $1==4 | source4 source4 | allocate(%[1],REG,QREG) "mnegl\t%[1],%[a]" move(%[2],%[b.1]) @@ -1021,7 +1176,12 @@ sru !defined($1) | source1or2or4 | * Group 5 : Floating point arithmetic * ****************************************/ -adf $1==4 | source4 sreg4 | +adf $1==4 | source4 source4 | + allocate(%[1],%[2],REG) + "addf3\t%[1],%[2],%[a]" + setcc(%[a]) | %[a] | | (4,8)+%[1]+%[2] +#ifdef FLOAT4 +... | source4 sreg4 | "addf2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,8) + %[1] @@ -1029,26 +1189,53 @@ adf $1==4 | source4 sreg4 | "addf2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,8) + %[2] -... | NC nosreg4 nosreg4 | - allocate(%[1],%[2],REG) - "addf3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,8)+%[1]+%[2] -#ifdef FLOAT4 -adf stl $1==4 | source4 source4 | +#ifdef REGVARS +adf stl $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "addf3\t%[1],%[2],%(regvar($2)%)" + erase(regvar($2)) | | | +#endif REGVARS +adf stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, %[num] <= $2+3 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) "addf3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -adf sil $1==4 | source4 source4 | + setcc({LOCAL4,LB,$2,4}) | | | +adf stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) + "addf3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +#ifdef REGVARS +adf sil $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "addf3\t%[1],%[2],(%(regvar($2)%))" + setcc(regvar($2)) | | | +#endif REGVARS +adf sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "addf3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +adf sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "addf3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | adf ste $1==4 | source4 source4 | remove(externals) "addf3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -#endif -adf $1==8 | source8 sreg8 | +#endif FLOAT4 +adf $1==8 | source8 source8 | + allocate(%[1],%[2],QREG) + "addd3\t%[1],%[2],%[a]" + setcc(%[a]) | %[a] | | (4,14)+%[1]+%[2] +#ifdef FLOAT8 +... | source8 sreg8 | "addd2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,14) + %[1] @@ -1056,68 +1243,114 @@ adf $1==8 | source8 sreg8 | "addd2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,14) + %[2] -... | NC nosreg8 source8-sreg8 | - allocate(%[1],%[2],QREG) - "addd3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,14)+%[1]+%[2] -adf sdl $1==8 | source8 source8 | +adf sdl $1==8 && $2<0 + | source8 source8 | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) "addd3\t%[1],%[2],$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +adf sdl $1==8 && $2>=0 + | source8 source8 | + remove(displaced) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) + "addd3\t%[1],%[2],$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | adf sde $1==8 | source8 source8 | remove(externals) "addd3\t%[1],%[2],$2" setcc({EXTERNAL8,$2}) | | | +#endif FLOAT8 adf !defined($1) | source4 | remove(ALL) move(%[1],R0) "jsb\t.adf" | | | -sbf $1==4 | source4 sreg4 | - "subf2\t%[1],%[2]" - erase(%[2]) - setcc(%[2]) | %[2] | | (3,8) + %[1] -... | NC source4 nosreg4 | +sbf $1==4 | source4 source4 | allocate(%[1],%[2],REG) "subf3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,8)+%[1]+%[2] #ifdef FLOAT4 -sbf stl $1==4 | source4 source4 | +... | NC source4 sreg4 | + "subf2\t%[1],%[2]" + erase(%[2]) + setcc(%[2]) | %[2] | | (3,8) + %[1] +#ifdef REGVARS +sbf stl $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "subf3\t%[1],%[2],%(regvar($2)%)" + erase(regvar($2)) + setcc(regvar($2)) | | | +#endif REGVARS +sbf stl $1==4 $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, %[num] <= $2+3 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) "subf3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -sbf sil $1==4 | source4 source4 | + setcc({LOCAL4,LB,$2,4}) | | | +sbf stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) + "subf3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +#ifdef REGVARS +sbf sil $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "subf3\t%[1],%[2],(%(regvar($2)%))" + setcc(regvar($2)) | | | +#endif REGVARS +sbf sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "subf3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +sbf sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "subf3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | sbf ste $1==4 | source4 source4 | remove(externals) "subf3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -#endif -sbf $1==8 | source8 sreg8 | - "subd2\t%[1],%[2]" - erase(%[2]) - setcc(%[2]) | %[2] | | (3,14) + %[1] -... | NC source8 nosreg8 | +#endif FLOAT4 +sbf $1==8 | source8 source8 | allocate(%[1],%[2],QREG) "subd3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,14)+%[1]+%[2] -sbf sdl $1==8 | source8 source8 | +#ifdef FLOAT8 +... | source8 sreg8 | + "subd2\t%[1],%[2]" + erase(%[2]) + setcc(%[2]) | %[2] | | (3,14) + %[1] +sbf sdl $1==8 && $2<0 + | source8 source8 | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) "subd3\t%[1],%[2],$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +sbf sdl $1==8 && $2>=0 + | source8 source8 | + remove(displaced) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) + "subd3\t%[1],%[2],$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | sbf sde $1==8 | source8 source8 | remove(externals) "subd3\t%[1],%[2],$2" setcc({EXTERNAL8,$2}) | | | +#endif FLOAT8 sbf !defined($1) | source1or2or4 | remove(ALL) move(%[1],R0) "jsb\t.sbf" | | | -mlf $1==4 | source4 sreg4 | +mlf $1==4 | source4 source4 | + allocate(%[1],%[2],REG) + "mulf3\t%[1],%[2],%[a]" + setcc(%[a]) | %[a] | | (4,12)+%[1]+%[2] +#ifdef FLOAT4 +... | source4 sreg4 | "mulf2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,12) + %[1] @@ -1125,26 +1358,53 @@ mlf $1==4 | source4 sreg4 | "mulf2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,12) + %[2] -... | NC nosreg4 nosreg4 | - allocate(%[1],%[2],REG) - "mulf3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,12)+%[1]+%[2] -#ifdef FLOAT4 -mlf stl $1==4 | source4 source4 | +#ifdef REGVARS +mlf stl $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "mulf3\t%[1],%[2],%(regvar($2)%)" + erase(regvar($2)) | | | +#endif REGVARS +mlf stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, %[num] <= $2+3 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) "mulf3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -mlf sil $1==4 | source4 source4 | + setcc({LOCAL4,LB,$2,4}) | | | +mlf stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) + "mulf3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +#ifdef REGVARS +mlf sil $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "mulf3\t%[1],%[2],(%(regvar($2)%))" + setcc(regvar($2)) | | | +#endif REGVARS +mlf sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "mulf3\t%[1],%[2],*$2(fp)" - setcc({displdef4,LB,tostring($2)}) | | | + setcc({displdef4,LB,tostring($2)}) | | | +mlf sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "mulf3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | mlf ste $1==4 | source4 source4 | remove(externals) "mulf3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -#endif -mlf $1==8 | source8 sreg8 | +#endif FLOAT4 +mlf $1==8 | source8 source8 | + allocate(%[1],%[2],QREG) + "muld3\t%[1],%[2],%[a]" + setcc(%[a]) | %[a] | | (4,20)+%[1]+%[2] +#ifdef FLOAT8 +... | source8 sreg8 | "muld2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,20) + %[1] @@ -1152,63 +1412,104 @@ mlf $1==8 | source8 sreg8 | "muld2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,20) + %[2] -... | NC nosreg8 source8-sreg8 | - allocate(%[1],%[2],QREG) - "muld3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,20)+%[1]+%[2] -mlf sdl $1==8 | source8 source8 | +mlf sdl $1==8 && $2<0 + | source8 source8 | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) "muld3\t%[1],%[2],$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +mlf sdl $1==8 && $2>=0 + | source8 source8 | + remove(displaced) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) + "muld3\t%[1],%[2],$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | mlf sde $1==8 | source8 source8 | remove(externals) "muld3\t%[1],%[2],$2" setcc({EXTERNAL8,$2}) | | | +#endif FLOAT8 mlf !defined($1) | source1or2or4 | remove(ALL) move(%[1],R0) "jsb\t.mlf" | | | -dvf $1==4 | source4 sreg4 | - "divf2\t%[1],%[2]" - erase(%[2]) - setcc(%[2]) | %[2] | | (3,46) + %[1] -... | NC source4 nosreg4 | +dvf $1==4 | source4 source4 | allocate(%[1],%[2],REG) "divf3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,46)+%[1]+%[2] #ifdef FLOAT4 -dvf stl $1==4 | source4 source4 | +... | source4 sreg4 | + "divf2\t%[1],%[2]" + erase(%[2]) + setcc(%[2]) | %[2] | | (3,46) + %[1] +#ifdef REGVARS +dvf stl $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "divf3\t%[1],%[2],%(regvar($2)%)" + erase(regvar($2)) + setcc(regvar($2)) | | | +#endif REGVARS +dvf stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, %[num] <= $2+3 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) "divf3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -dvf sil $1==4 | source4 source4 | + setcc({LOCAL4,LB,$2,4}) | | | +dvf stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) + "divf3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +#ifdef REGVARS +dvf sil $1==4 && inreg($2)==2 + | source4 source4 | + remove(regvar($2)) + "divf3\t%[1],%[2],(%(regvar($2)%))" + setcc(regvar($2)) | | | +#endif REGVARS +dvf sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "divf3\t%[1],%[2],*$2(fp)" - setcc({displdef4,LB,tostring($2)}) | | | + setcc({displdef4,LB,tostring($2)}) | | | +dvf sil $1==4 &&$2>=0 + | source4 source4 | + REMEXTANDLOC + "divf3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | dvf ste $1==4 | source4 source4 | remove(externals) "divf3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -#endif -dvf $1==8 | source8 sreg8 | - "divd2\t%[1],%[2]" - erase(%[2]) - setcc(%[2]) | %[2] | | (3,80) + %[1] -... | NC source8 nosreg8 | +#endif FLOAT4 +dvf $1==8 | source8 source8 | allocate(%[1],%[2],QREG) "divd3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,80)+%[1]+%[2] -dvf sdl $1==8 | source8 source8 | +#ifdef FLOAT8 +... | source8 sreg8 | + "divd2\t%[1],%[2]" + erase(%[2]) + setcc(%[2]) | %[2] | | (3,80) + %[1] +dvf sdl $1==8 && $2<0 + | source8 source8 | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) "divd3\t%[1],%[2],$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +dvf sdl $1==8 && $2>=0 + | source8 source8 | + remove(displaced) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) + "divd3\t%[1],%[2],$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | dvf sde $1==8 | source8 source8 | remove(externals) "divd3\t%[1],%[2],$2" setcc({EXTERNAL8,$2}) | | | +#endif FLOAT8 dvf !defined($1) | source1or2or4 | remove(ALL) move(%[1],R0) @@ -1218,54 +1519,84 @@ ngf $1==4 | source4 | "mnegf\t%[1],%[a]" setcc(%[a]) | %[a] | | #ifdef FLOAT4 -ngf stl $1==4 | source4 | +#ifdef REGVARS +ngf stl $1==4 && inreg($2)==2 + | source4 | + remove(regvar($2)) + "mnegf\t%[1],%(regvar($2)%)" + erase(regvar($2)) + setcc(regvar($2)) | | | +#endif REGVARS +ngf stl $1==4 $2<0 + | source4 | remove(displaced) - remove(LOCALS, %[num] <= $2+3 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) "mnegf\t%[1],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -ngf sil $1==4 | source4 | + setcc({LOCAL4,LB,$2,4}) | | | +ngf stl $1==4 && $2>=0 + | source4 | + remove(displaced) + remove(LOCALS,%[num] <= $2+3 && %[num]+%[size] > $2) + "mnegf\t%[1],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +#ifdef REGVARS +ngf sil $1==4 && inreg($2)==2 + | source4 | + remove(regvar($2)) + "mnegf\t%[1],(%(regvar($2)%))" + setcc(regvar($2)) | | | +#endif REGVARS +ngf sil $1==4 && $2<0 + | source4 | REMEXTANDLOC "mnegf\t%[1],*$2(fp)" - setcc({displdef4,LB,tostring($2)}) | | | + setcc({displdef4,LB,tostring($2)}) | | | +ngf sil $1==4 && $2>=0 + | source4 | + REMEXTANDLOC + "mnegf\t%[1],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | ngf ste $1==4 | source4 | remove(externals) "mnegf\t%[1],$2" setcc({EXTERNAL4,$2}) | | | -#endif +#endif FLOAT4 ngf $1==8 | source8 | allocate(%[1],QREG) "mnegd\t%[1],%[a]" setcc(%[a]) | %[a] | | -ngf sdl $1==8 | source8 | +#ifdef FLOAT8 +ngf sdl $1==8 && $2<0 + | source8 | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) "mnegd\t%[1],$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +ngf sdl $1==8 && $2>=0 + | source8 | + remove(displaced) + remove(LOCALS,%[num] <= $2+7 && %[num]+%[size] > $2) + "mnegd\t%[1],$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | ngf sde $1==8 | source8 | remove(externals) "mnegd\t%[1],$2" setcc({EXTERNAL8,$2}) | | | +#endif FLOAT8 ngf !defined($1) | source1or2or4 | remove(ALL) move(%[1],R0) "jsb\t.ngf" | | | -loc loc loc cif fif $1==1 && $2==4 && $3==4 && $5==4 - | source4 | - allocate(%[1],REG,REG) - "emodf\t%[1],$$0,$$0f1.0,%[b],%[a]" - /* Don't trust the integer part in %[b], * - * integer overflow might occur. */ - "subf3\t%[a],%[1],%[b]" | %[a] %[b] | | -loc loc loc cif fif $1==1 && $2==4 && $3==8 && $5==8 - | source8 | - allocate(%[1],QREG,QREG) - "emodd\t%[1],$$0,$$0f1.0,%[b],%[a]" - "subd3\t%[a],%[1],%[b]" | %[a] %[b] | | fif $1==4 | source4 source4 | - allocate(%[1],%[2],REG,REG,REG) + allocate(%[1],%[2],REG,REG) "mulf3\t%[1],%[2],%[a]" - "emodf\t%[a],$$0,$$0f1.0,%[b],%[c]" - "subf2\t%[c],%[a]" | %[c] %[a] | | + "emodf\t%[a],$$0,$$0f1.0,-(sp),%[b]" + /* + * Don't trust the integer part. + * Overflow could occur. + */ + "tstl\t(sp)+" + "subf2\t%[b],%[a]" | %[b] %[a] | | fif $1==8 | source8 source8 | allocate(%[1],%[2],QREG,QREG) "muld3\t%[1],%[2],%[a]" @@ -1300,46 +1631,66 @@ fef !defined($1) | source1or2or4 | ********************************/ adp $1==0 | | | | | -adp | NC adispl | - | {adispl,%[1.reg],%[1.ind]+"+"+tostring($1)} | | -... | NC ADDR_EXTERNAL | - | {ADDR_EXTERNAL,%[1.ind]+"+"+tostring($1)} | | -... | NC ADDR_LOCAL | | {ADDR_LOCAL,%[1.num]+$1} | | -... | reg4 | | {adispl,%[1],tostring($1)} | | +adp | NC ADDR_EXTERNAL | + | {ADDR_EXTERNAL,%[1.ind]+"+"+tostring($1)} | | +... | NC ADDR_LOCAL | + | {ADDR_LOCAL,%[1.reg],%[1.num]+$1} | | ... | NC adisplind1 | | {adisplind1,%[1.ireg],%[1.reg], %[1.ind]+"+"+tostring($1)} | | -... | NC adisplind2 | - | {adisplind2,%[1.ireg],%[1.reg], - %[1.ind]+"+"+tostring($1)} | | -... | NC adisplind4 | - | {adisplind4,%[1.ireg],%[1.reg], - %[1.ind]+"+"+tostring($1)} | | -... | NC adisplind8 | - | {adisplind8,%[1.ireg],%[1.reg], - %[1.ind]+"+"+tostring($1)} | | -... | NC aextind2 | - | {aextind2,%[1.ireg],%[1.ind]+"+"+tostring($1)} | | -... | NC aextind4 | - | {aextind4,%[1.ireg],%[1.ind]+"+"+tostring($1)} | | -... | NC aextind8 | - | {aextind8,%[1.ireg],%[1.ind]+"+"+tostring($1)} | | +... | NC adispldefind1 | + allocate(%[1.ireg],REG) + "addl3\t$$$1,%[1.ireg],%[a]" + | {adispldefind1,%[a],%[1.reg],%[1.ind]} | | +... | NC aextdefind1 | + allocate(%[1],REG) + "addl3\t$$$1,%[1.ireg],%[a]" + | {aextdefind1,%[a],%[1.ind]} | | +... | NC adispl | | {adispl,%[1.reg],%[1.ind]+"+"+tostring($1)} | | +... | reg4 | | {adispl,%[1],tostring($1)} | | +adp stl | | | {CONST4,$1} | adi 4 stl $2 | +adp ste | | | {CONST4,$1} | adi 4 ste $2 | +adp dup $2==4 | | | {CONST4,$1} | adi 4 dup 4 | +adp lol stf | | | {CONST4,$1} | adi 4 lol $2 stf $3 | +adp lol sti $3==4 + | | | {CONST4,$1} | adi 4 lol $2 sti 4 | +adp loe sti $3==4 + | | | {CONST4,$1} | adi 4 loe $2 sti 4 | +adp cms $2==4 | | | {CONST4,$1} | adi 4 cms 4 | +loe lof adp loe stf $1==$4 && $2==$5 + | | REMEXTANDLOC + allocate(REG={EXTERNAL4,$1}) + "addl2\t$$$3,$2(%[a])" | | | +lol lof adp lol stf $1<0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,LB,$1,4}) + "addl2\t$$$3,$2(%[a])" | | | +lol lof adp lol stf $1>=0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,AP,$1,4}) + "addl2\t$$$3,$2(%[a])" | | | ads $1==4 | NC reg4 adispl | - | {adisplind1,%[1],%[2.reg],%[2.ind]} | | + | {adisplind1,%[1],%[2.reg],%[2.ind]} | | ... | NC reg4 ADDR_LOCAL | - | {adisplind1,%[1],LB,tostring(%[2.num])} | | + | {adisplind1,%[1],%[2.reg],tostring(%[2.num])} | | ... | NC reg4 ADDR_EXTERNAL | - | {adispl,%[1],%[2.ind]} | | + | {adispl,%[1],%[2.ind]} | | +... | NC reg4 aextind2 | + | {adisplind2,%[2.ireg],%[1],%[2.ind]} | | +... | NC reg4 aextind4 | + | {adisplind4,%[2.ireg],%[1],%[2.ind]} | | +... | NC reg4 aextind8 | + | {adisplind8,%[2.ireg],%[1],%[2.ind]} | | ... | NC reg4 displ4 | - | {adispldefind1,%[1],%[2.reg],%[2.ind]} | | + | {adispldefind1,%[1],%[2.reg],%[2.ind]} | | ... | NC reg4 LOCAL4 | - | {adispldefind1,%[1],LB,tostring(%[2.num])} | | + | {adispldefind1,%[1],%[2.reg],tostring(%[2.num])} | | +... | NC reg4 regdef4 | + | {adispldefind1,%[1],%[2.reg],"0"} | | ... | NC reg4 EXTERNAL4 | - | {aextdefind1,%[1],%[2.ind]} | | -... | source4 source4 | - allocate(%[1],%[2],REG) - "addl3\t%[1],%[2],%[a]" - setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] + | {aextdefind1,%[1],%[2.ind]} | | +... | NC reg4 reg4 | | {adisplind1,%[1],%[2],"0"} | | +... | | | adi 4 | ads | | | | loc $1 loc 4 cii ads 4 | ads !defined($1) | | | | loc 4 cii ads 4 | sbs $1==4 | | | | sbu $1 | @@ -1353,6 +1704,16 @@ adp dup sil adp $1==(0-$4) && $2==4 | reg4 | | %[1] %[1] | adp $1 sil $3 | adp dup loe sti adp $1==(0-$5) && $2==4 && $4==4 | reg4 | | %[1] %[1] | adp $1 loe $3 sti 4 | +dup adp lol sti $1==4 && $4==4 + | bigsource4 | + allocate(REG=%[1]) + | %[a] %[1] {CONST4,$2} + | adi 4 lol $3 sti 4 | +dup adp loe sti $1==4 && $4==4 + | bigsource4 | + allocate(REG=%[1]) + | %[a] %[1] {CONST4,$2} + | adi 4 loe $3 sti 4 | #ifdef REGVARS lol lol adp stl loi $1==$4 && $2==$1 && inreg($1)==2 && $3==1 && $5==1 | | remove(regvar($1)) @@ -1466,21 +1827,32 @@ lol adp stl $1==$3 && inreg($1)==2 "addl2\t$$$2,%(regvar($1)%)" erase(regvar($1)) | | | #endif REGVARS -lol adp stl $1==$3 +lol adp stl $1==$3 && $1<0 | | remove(displaced) - remove(LOCALS, %[num] <= $1+3 && %[num]+%[size] > $1) - "addl2\t$$$2,$1(fp)" - setcc({LOCAL4,$1,4}) | | | -lol lol adp stl $1==$4 && $2==$4 + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + "addl2\t$$$2,$1(ap)" + setcc({LOCAL4,LB,$1,4}) | | | +lol adp stl $1==$3 && $1>=0 + | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + "addl2\t$$$2,$1(ap)" + setcc({LOCAL4,AP,$1,4}) | | | +lol lol adp stl $1==$4 && $2==$4 && $2<0 | | remove(displaced) - remove(LOCALS, %[num] <= $1+3 && %[num]+%[size] > $1) - allocate(REG={LOCAL4,$1,4}) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + allocate(REG={LOCAL4,LB,$1,4}) "addl2\t$$$3,$1(fp)" - setcc({LOCAL4,$1,4}) | %[a] | | + setcc({LOCAL4,LB,$1,4}) | %[a] | | +lol lol adp stl $1==$4 && $2==$4 + | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + allocate(REG={LOCAL4,AP,$1,4}) + "addl2\t$$$3,$1(ap)" + setcc({LOCAL4,AP,$1,4}) | %[a] | | #ifdef REGVARS lil lil adp sil $1==$2 && $1==$4 && inreg($1)==2 | | REMEXTANDLOC - allocate(REG={regdef4, regvar($1)}) + allocate(REG={regdef4,regvar($1)}) "addl2\t$$$3,(%(regvar($1)%))" | %[a] | | #endif loe adp ste $1==$3 @@ -1498,17 +1870,51 @@ loe loe adp ste $1==$4 && $2==$1 lil inc dup sil $3==4 && $1==$4 | | | | lil $1 loc 1 adi 4 sil $1 lil $1 | lil dec dup sil $3==4 && $1==$4 | | | | lil $1 loc 1 sbi 4 sil $1 lil $1 | inc | | | {CONST1,1} | adi 4 | +loe lof inc loe stf $1==$4 && $2==$5 + | | REMEXTANDLOC + allocate(REG={EXTERNAL4,$1}) + "incl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | +lol lof inc lol stf $1<0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,LB,$1,4}) + "incl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | +lol lof inc lol stf $1>=0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,AP,$1,4}) + "incl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | dec | | | {CONST1,1} | sbi 4 | +loe lof dec loe stf $1==$4 && $2==$5 + | | REMEXTANDLOC + allocate(REG={EXTERNAL4,$1}) + "decl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | +lol lof dec lol stf $1<0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,LB,$1,4}) + "decl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | +lol lof dec lol stf $1>=0 && $1==$4 && inreg($1)!=2 && $2==$5 + | | REMEXTANDLOC + allocate(REG={LOCAL4,AP,$1,4}) + "decl\t$2(%[a])" + setcc({displ4,%[a],tostring($2)}) | | | #ifdef REGVARS inl inreg($1)==2 | | remove(regvar($1)) "incl\t%(regvar($1)%)" erase(regvar($1)) setcc(regvar($1)) | | | #endif REGVARS -inl | | remove(displaced) - remove(LOCALS, %[num] <= $1+3 && %[num]+%[size] > $1) +inl $1<0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) "incl\t$1(fp)" - setcc({LOCAL4,$1, 4}) | | | + setcc({LOCAL4,LB,$1,4}) | | | +inl $1>=0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + "incl\t$1(ap)" + setcc({LOCAL4,AP,$1,4}) | | | #ifdef REGVARS lol inl $1==$2 && inreg($1)==2 | | remove(regvar($1)) @@ -1519,17 +1925,21 @@ lol inl $1==$2 && inreg($1)==2 #endif REGVARS ine | | remove(externals) "incl\t$1" - setcc({EXTERNAL4, $1}) | | | + setcc({EXTERNAL4,$1}) | | | #ifdef REGVARS del inreg($1)==2 | | remove(regvar($1)) "decl\t%(regvar($1)%)" erase(regvar($1)) setcc(regvar($1)) | | | #endif REGVARS -del | | remove(displaced) - remove(LOCALS, %[num] <= $1+3 && %[num]+%[size] > $1) +del $1<0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) "decl\t$1(fp)" - setcc({LOCAL4,$1, 4}) | | | + setcc({LOCAL4,LB,$1,4}) | | | +del $1>=0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + "decl\t$1(ap)" + setcc({LOCAL4,AP,$1,4}) | | | #ifdef REGVARS lol del $1==$2 && inreg($1)==2 | | remove(regvar($1)) @@ -1540,38 +1950,50 @@ lol del $1==$2 && inreg($1)==2 #endif REGVARS dee | | remove(externals) "decl\t$1" - setcc({EXTERNAL4, $1}) | | | + setcc({EXTERNAL4,$1}) | | | #ifdef REGVARS zrl inreg($1)==2 | | remove(regvar($1)) "clrl\t%(regvar($1)%)" erase(regvar($1)) - setcc(regvar($1)) | | | + setcc(regvar($1)) | | | #endif REGVARS -zrl | | remove(displaced) - remove(LOCALS,%[num] <= $1+3 && %[num]+%[size] > $1) +zrl $1<0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) "clrl\t$1(fp)" - setcc({LOCAL4,$1, 4}) | | | -zrl zrl $1==$2+4 + setcc({LOCAL4,LB,$1,4}) | | | +zrl $1>=0 | | remove(displaced) + remove(LOCALS,%[num]<=$1+3 && %[num]+%[size]>$1) + "clrl\t$1(ap)" + setcc({LOCAL4,AP,$1,4}) | | | +zrl zrl $1==$2+4 && $1<0 #ifdef REGVARS && inreg($1)<2 && inreg($2)<2 #endif REGVARS | | remove(displaced) - remove(LOCALS, %[num] <= $2+7 && %[num]+%[size] > $2) + remove(LOCALS,%[num]<=$2+7 && %[num]+%[size]>$2) "clrq\t$2(fp)" - setcc({LOCAL8,$2, 8}) | | | + setcc({LOCAL8,LB,$2,8}) | | | +zrl zrl $1==$2+4 && $1>=0 +#ifdef REGVARS + && inreg($1)<2 && inreg($2)<2 +#endif REGVARS + | | remove(displaced) + remove(LOCALS,%[num]<=$2+7 && %[num]+%[size]>$2) + "clrq\t$2(ap)" + setcc({LOCAL8,AP,$2,8}) | | | zrl zrl $1==$2-4 | | | | zrl $2 zrl $1 | zre | | remove(externals) "clrl\t$1" - setcc({EXTERNAL4, $1}) | | | + setcc({EXTERNAL4,$1}) | | | zrf $1==4 | | | {CONST4,0} | | zrf $1==8 | | | {FCONST8,0} | | zer $1==4 | | | {CONST4,0} | | zer $1==8 | | allocate(QREG) "clrq\t%[a]" | %[a] | | -zer $1<=32 | | remove(ALL) +zer $1<=32 | STACK | "clrq\t-(sp)" | | zer $1-8 | -zer defined($1) | | remove(ALL) - move({CONST4,$1/4}, R0) +zer defined($1) | STACK | + move({CONST4,$1/4},R0) #ifdef LOCLABS "1:\tclrl\t-(sp)" "sobgtr\tr0,1b" @@ -1596,22 +2018,22 @@ zer !defined($1) | source1or2or4 | * Group 8 : Convertions * ********************************/ -cii | | remove(ALL) +cii | STACK | "jsb\t.cii" | | | -cfi | | remove(ALL) +cfi | STACK | "jsb\t.cfi" | | | -cfu | | remove(ALL) +cfu | STACK | "jsb\t.cfu" | | | -cuf | | remove(ALL) +cuf | STACK | "jsb\t.cuf" | | | -cif | | remove(ALL) +cif | STACK | "jsb\t.cif" | | | -cff | | remove(ALL) +cff | STACK | "jsb\t.cff" | | | -cuu | | remove(ALL) +cuu | STACK | "jsb\t.cuu" | | | ciu | | | | cuu | -cui | | remove(ALL) +cui | STACK | "jsb\t.cui" | | | loc loc cii $1==1 && $2==2 | source1or2or4 | allocate(%[1],REG) @@ -1625,15 +2047,22 @@ loc loc cii stl $1==1 && $2==4 && inreg($4)==2 erase(regvar($1)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cii stl $1==1 && $2==4 | source1or2or4 | +loc loc cii stl $1==1 && $2==4 && $4<0 + | source1or2or4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtbl\t%[1],$4(fp)" - setcc({LOCAL4,$4, 4}) | | | + setcc({LOCAL4,LB,$4,4}) | | | +loc loc cii stl $1==1 && $2==4 && $4>=0 + | source1or2or4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtbl\t%[1],$4(ap)" + setcc({LOCAL4,AP,$4,4}) | | | loc loc cii ste $1==1 && $2==4 | source1or2or4 | remove(externals) "cvtbl\t%[1],$4" - setcc({EXTERNAL4, $4}) | | | + setcc({EXTERNAL4,$4}) | | | loc loc cii $1==1 && $2==4 | source1or2or4 | allocate(%[1],REG) "cvtbl\t%[1],%[a]" @@ -1646,15 +2075,22 @@ loc loc cii stl $1==2 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cii stl $1==2 && $2==4 | source2or4 | +loc loc cii stl $1==2 && $2==4 && $4<0 + | source2or4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtwl\t%[1],$4(fp)" - setcc({LOCAL4,$4, 4}) | | | + setcc({LOCAL4,LB,$4,4}) | | | +loc loc cii stl $1==2 && $2==4 && $4>=0 + | source2or4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtwl\t%[1],$4(ap)" + setcc({LOCAL4,AP,$4,4}) | | | loc loc cii ste $1==2 && $2==4 | source2or4 | remove(externals) "cvtwl\t%[1],$4" - setcc({EXTERNAL4, $4}) | | | + setcc({EXTERNAL4,$4}) | | | loc loc cii $1==2 && $2==4 | source2or4 | allocate(%[1],REG) "cvtwl\t%[1],%[a]" @@ -1664,6 +2100,7 @@ loc loc cii $1==4 && $2==1 | | | | | loc loc cii $1==4 && $2==2 | | | | | loc loc cui $1==$2 | | | | | loc loc ciu | | | | loc $1 loc $2 cuu | +#ifdef FLOAT4 #ifdef REGVARS loc loc cfi stl $1==4 && $2==4 && inreg($4)==2 | source4 | @@ -1672,19 +2109,28 @@ loc loc cfi stl $1==4 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cfi stl $1==4 && $2==4 | source4 | +loc loc cfi stl $1==4 && $2==4 && $4<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtfl\t%[1],$4(fp)" - setcc({LOCAL4,$4, 4}) | | | + setcc({LOCAL4,AP,$4,4}) | | | +loc loc cfi stl $1==4 && $2==4 && $4>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtfl\t%[1],$4(ap)" + setcc({LOCAL4,AP,$4,4}) | | | loc loc cfi ste $1==4 && $2==4 | source4 | remove(externals) "cvtfl\t%[1],$4" - setcc({EXTERNAL4, $4}) | | | + setcc({EXTERNAL4,$4}) | | | +#endif FLOAT4 loc loc cfi $1==4 && $2==4 | source4 | allocate(%[1],REG) "cvtfl\t%[1],%[a]" setcc(%[a]) | %[a] | | (3,4) + %[1] +#ifdef FLOAT8 #ifdef REGVARS loc loc cfi stl $1==8 && $2==4 && inreg($4)==2 | source8 | @@ -1693,19 +2139,28 @@ loc loc cfi stl $1==8 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cfi stl $1==8 && $2==4 | source8 | +loc loc cfi stl $1==8 && $2==4 && $4<0 + | source8 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtdl\t%[1],$4(fp)" - setcc({LOCAL4,$4, 4}) | | | + setcc({LOCAL4,LB,$4,4}) | | | +loc loc cfi stl $1==8 && $2==4 && $4>=0 + | source8 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtdl\t%[1],$4(ap)" + setcc({LOCAL4,AP,$4,4}) | | | loc loc cfi ste $1==8 && $2==4 | source8 | remove(externals) "cvtdl\t%[1],$4" - setcc({EXTERNAL4, $4}) | | | + setcc({EXTERNAL4,$4}) | | | +#endif FLOAT8 loc loc cfi $1==8 && $2==4 | source8 | allocate(%[1],REG) "cvtdl\t%[1],%[a]" setcc(%[a]) | %[a] | | +#ifdef FLOAT4 #ifdef REGVARS loc loc cif stl $1==4 && $2==4 && inreg($4)==2 | source4 | @@ -1714,17 +2169,25 @@ loc loc cif stl $1==4 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cif stl $1==4 && $2==4 | source4 | +loc loc cif stl $1==4 && $2==4 && $4<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtlf\t%[1],$4(fp)" | | | +loc loc cif stl $1==4 && $2==4 && $4>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtlf\t%[1],$4(ap)" | | | loc loc cif ste $1==4 && $2==4 | source4 | remove(externals) "cvtlf\t%[1],$4" | | | +#endif FLOAT4 loc loc cif $1==4 && $2==4 | source4 | allocate(%[1],REG) "cvtlf\t%[1],%[a]" | %[a] | | -/* No double registervariables yet... +#ifdef FLOAT8 +/* No double registervariables #ifdef REGVARS loc loc cif sdl $1==4 && $2==8 && inreg($4)==2 | source4 | @@ -1734,10 +2197,16 @@ loc loc cif sdl $1==4 && $2==8 && inreg($4)==2 setcc(regvar($4)) | | | #endif REGVARS */ -loc loc cif sdl $1==4 && $2==8 | source4 | +loc loc cif sdl $1==4 && $2==8 && $4<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtld\t%[1],$4(fp)" | | | +loc loc cif sdl $1==4 && $2==8 && $4>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtld\t%[1],$4(ap)" | | | loc loc cif sde $1==4 && $2==8 | source4 | remove(externals) "cvtld\t%[1],$4" | | | @@ -1746,6 +2215,7 @@ loc loc loc cif $1!=0 && $2==4 && $3==8 | | | {FCONST8,$1} | | * doesn't handle 0f0.0 (and other numbers that have the 0x4000 bit off * in the exponent) right. */ +#endif FLOAT8 loc loc cif $1==4 && $2==8 | source4 | allocate(%[1],QREG) "cvtld\t%[1],%[a]" | %[a] | | @@ -1755,6 +2225,8 @@ loc loc cfu $1==4 | source4 | loc loc cfu $1==8 | source8 | allocate(%[1],QREG=%[1]) "bicl2\t$$32768,%[a]" | %[a] | loc $1 loc $2 cfi | +#ifdef FLOAT8 +/* No double registervariables #ifdef REGVARS loc loc cff sdl $1==4 && $2==8 && inreg($4)==2 | source4 | @@ -1763,16 +2235,25 @@ loc loc cff sdl $1==4 && $2==8 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cff sdl $1==4 && $2==8 | source4 | +*/ +loc loc cff sdl $1==4 && $2==8 && $4<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+7 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+7 && %[num]+%[size] > $4)) "cvtfd\t%[1],$4(fp)" | | | +loc loc cff sdl $1==4 && $2==8 && $4>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+7 && %[num]+%[size] > $4)) + "cvtfd\t%[1],$4(ap)" | | | loc loc cff sde $1==4 && $2==8 | source4 | remove(externals) "cvtfd\t%[1],$4" | | | +#endif FLOAT8 loc loc cff $1==4 && $2==8 | source4 | allocate(%[1],QREG) "cvtfd\t%[1],%[a]" | %[a] | | +#ifdef FLOAT4 #ifdef REGVARS loc loc cff stl $1==8 && $2==4 && inreg($4)==2 | source8 | @@ -1781,13 +2262,20 @@ loc loc cff stl $1==8 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cff stl $1==8 && $2==4 | source8 | +loc loc cff stl $1==8 && $2==4 && $4<0 + | source8 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "cvtdf\t%[1],$4(fp)" | | | +loc loc cff stl $1==8 && $2==4 && $4>=0 + | source8 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "cvtdf\t%[1],$4(ap)" | | | loc loc cff ste $1==8 && $2==4 | source8 | remove(externals) "cvtdf\t%[1],$4" | | | +#endif FLOAT4 loc loc cff $1==8 && $2==4 | source8 | allocate(%[1],REG) "cvtdf\t%[1],%[a]" | %[a] | | @@ -1799,15 +2287,22 @@ loc loc cuu stl $1==2 && $2==4 && inreg($4)==2 erase(regvar($4)) setcc(regvar($4)) | | | #endif REGVARS -loc loc cuu stl $1==2 && $2==4 | source2or4 | +loc loc cuu stl $1==2 && $2==4 && $4<0 + | source2or4 | remove(displaced) - remove(LOCALS, (%[num] <= $4+3 && %[num]+%[size] > $4)) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) "movzwl\t%[1],$4(fp)" - setcc({LOCAL4,$4, 4}) | | | + setcc({LOCAL4,LB,$4,4}) | | | +loc loc cuu stl $1==2 && $2==4 && $4>=0 + | source2or4 | + remove(displaced) + remove(LOCALS,(%[num] <= $4+3 && %[num]+%[size] > $4)) + "movzwl\t%[1],$4(ap)" + setcc({LOCAL4,AP,$4,4}) | | | loc loc cuu ste $1==2 && $2==4 | source2or4 | remove(externals) "movzwl\t%[1],$4" - setcc({EXTERNAL4, $4}) | | | + setcc({EXTERNAL4,$4}) | | | loc loc cuu $1==2 && $2==4 | source2or4 | allocate(%[1],REG) "movzwl\t%[1],%[a]" @@ -1822,35 +2317,19 @@ and $1==4 | source4 source4 | "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],%[a]" setcc(%[a]) | %[a] | | (7,6)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | allocate(%[2],REG) "bicl3\t$$~%[1.num],%[2],%[a]" setcc(%[a]) | %[a] | | (4,3)+%[1]+%[2] -... | source4 CONST | +... | NC source4 CONST | allocate(%[1],REG) "bicl3\t$$~%[2.num],%[1],%[a]" setcc(%[a]) | %[a] | | (4,3)+%[1]+%[2] -and zeq $1==4 | source1 source1 | - remove(ALL) - "bitb\t%[1],%[2]" - "jeql\t$2" | | | -... | source2 source2 | - remove(ALL) - "bitw\t%[1],%[2]" - "jeql\t$2" | | | -... | source4 source4 | +and zeq $1==4 | source4 source4 | remove(ALL) "bitl\t%[1],%[2]" "jeql\t$2" | | | -and zne $1==4 | source1 source1 | - remove(ALL) - "bitb\t%[1],%[2]" - "jneq\t$2" | | | -... | source2 source2 | - remove(ALL) - "bitw\t%[1],%[2]" - "jneq\t$2" | | | -... | source4 source4 | +and zne $1==4 | source4 source4 | remove(ALL) "bitl\t%[1],%[2]" "jneq\t$2" | | | @@ -1867,92 +2346,136 @@ and tne $1==4 | source4 source4 | erase(%[a]) | %[a] | | #ifdef REGVARS and stl $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | remove(regvar($2)) allocate(%[1],REG) "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | (8,8)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | remove(regvar($2)) "bicl3\t$$~%[1.num],%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | (4,4)+%[1]+%[2] -... | source4 CONST | +... | NC source4 CONST | remove(regvar($2)) "bicl3\t$$~%[2.num],%[1],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | (4,4)+%[1]+%[2] #endif REGVARS -and stl $1==4 | source4-CONST source4 | +and stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) allocate(%[1],REG) "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | (9,12)+%[1]+%[2] + setcc({LOCAL4,LB,$2,4}) | | | (9,12)+%[1]+%[2] ... | NC CONST source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "bicl3\t$$~%[1.num],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | (6,9)+%[1]+%[2] + setcc({LOCAL4,LB,$2,4}) | | | (6,9)+%[1]+%[2] ... | NC source4 CONST | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "bicl3\t$$~%[2.num],%[1],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | (6,9)+%[1]+%[2] + setcc({LOCAL4,LB,$2,4}) | | | (6,9)+%[1]+%[2] +and stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + allocate(%[1],REG) + "mcoml\t%[1],%[a]" + "bicl3\t%[a],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | (9,12)+%[1]+%[2] +... | NC CONST source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "bicl3\t$$~%[1.num],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | (6,9)+%[1]+%[2] +... | NC source4 CONST | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "bicl3\t$$~%[2.num],%[1],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | (6,9)+%[1]+%[2] #ifdef REGVARS and sil $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | REMEXTANDLOC allocate(%[1],REG) "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | (9,15)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "bicl3\t$$~%[1.num],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | (6,12)+%[1]+%[2] -... | source4 CONST | +... | NC source4 CONST | REMEXTANDLOC "bicl3\t$$~%[2.num],%[1],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | (6,12)+%[1]+%[2] #endif REGVARS -and sil $1==4 | source4-CONST source4 | +and sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC allocate(%[1],REG) "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | (9,15)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "bicl3\t$$~%[1.num],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | (6,12)+%[1]+%[2] -... | source4 CONST | +... | NC source4 CONST | REMEXTANDLOC "bicl3\t$$~%[2.num],%[1],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | (6,12)+%[1]+%[2] -and ste $1==4 | source4-CONST source4 | +and sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + allocate(%[1],REG) + "mcoml\t%[1],%[a]" + "bicl3\t%[a],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) + | | | (9,15)+%[1]+%[2] +... | NC CONST source4 | + REMEXTANDLOC + "bicl3\t$$~%[1.num],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) + | | | (6,12)+%[1]+%[2] +... | NC source4 CONST | + REMEXTANDLOC + "bicl3\t$$~%[2.num],%[1],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) + | | | (6,12)+%[1]+%[2] +and ste $1==4 | source4 source4 | remove(externals) allocate(%[1],REG) "mcoml\t%[1],%[a]" "bicl3\t%[a],%[2],$2" setcc({EXTERNAL4,$2}) | | | (11,12)+%[1]+%[2] -... | CONST source4 | +... | NC CONST source4 | remove(externals) "bicl3\t$$~%[1.num],%[2],$2" setcc({EXTERNAL4,$2}) | | | (8,9)+%[1]+%[2] -... | source4 CONST | +... | NC source4 CONST | remove(externals) "bicl3\t$$~%[2.num],%[1],$2" setcc({EXTERNAL4,$2}) | | | (8,9)+%[1]+%[2] +and $1==8 | sreg8 sreg8 | + "mcoml\t%[1.1],%[1.1]" + "mcoml\t%[1.2],%[1.2]" + "bicl2\t%[1.1],%[2.1]" + "bicl2\t%[1.2],%[2.2]" + erase(%[1]) erase(%[2]) | %[2] | | and defined($1) | | remove(ALL) move({CONST4,$1},R0) "jsb\t.and" @@ -1962,15 +2485,15 @@ and !defined($1) | source4 | move(%[1],R0) "jsb\t.and" erase(R0) | | | -ior $1==4 | NC source4 source4 | +ior $1==4 | source4 source4 | allocate(%[1],%[2],REG) "bisl3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] -... | sreg4 source4 | +... | NC sreg4 source4 | "bisl2\t%[2],%[1]" erase(%[1]) setcc(%[1]) | %[1] | | (3,4) + %[2] -... | source4 sreg4 | +... | NC source4 sreg4 | "bisl2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,4) + %[1] @@ -1982,11 +2505,18 @@ ior stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -ior stl $1==4 | source4 source4 | +ior stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "bisl3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +ior stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "bisl3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS ior sil $1==4 && inreg($2)==2 | source4 source4 | @@ -1994,16 +2524,26 @@ ior sil $1==4 && inreg($2)==2 "bisl3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -ior sil $1==4 | source4 source4 | +ior sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "bisl3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +ior sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "bisl3\t%[1],%[2],*$2(ap)" + setcc({displdef4,LB,tostring($2)}) | | | ior ste $1==4 | source4 source4 | remove(externals) "bisl3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -ior defined($1) | | remove(ALL) - move({CONST4, $1},R0) +ior $1==8 | sreg8 sreg8 | + "bisl2\t%[1.1],%[2.1]" + "bisl2\t%[1.2],%[2.2]" + erase(%[2]) | %[2] | | +ior defined($1) | STACK | + move({CONST4,$1},R0) "jsb\t.ior" erase(R0) | | | ior !defined($1) | source4 | @@ -2031,11 +2571,18 @@ xor stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -xor stl $1==4 | source4 source4 | +xor stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "xorl3\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +xor stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "xorl3\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS xor sil $1==4 && inreg($2)==2 | source4 source4 | @@ -2043,16 +2590,22 @@ xor sil $1==4 && inreg($2)==2 "xorl3\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -xor sil $1==4 | source4 source4 | +xor sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "xorl3\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +xor sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "xorl3\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | xor ste $1==4 | source4 source4 | remove(externals) "xorl3\t%[1],%[2],$2" setcc({EXTERNAL4,$2}) | | | -xor defined($1) | | remove(ALL) - move({CONST4, $1},R0) +xor defined($1) | STACK | + move({CONST4,$1},R0) "jsb\t.xor" erase(R0) | | | xor !defined($1) | source4 | @@ -2072,11 +2625,18 @@ com stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -com stl $1==4 | source4 | +com stl $1==4 && $2<0 + | source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "mcoml\t%[1],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +com stl $1==4 && $2>=0 + | source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "mcoml\t%[1],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS com sil $1==4 && inreg($2)==2 | source4 | @@ -2084,15 +2644,21 @@ com sil $1==4 && inreg($2)==2 "mcoml\t%[1],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -com sil $1==4 | source4 | +com sil $1==4 && $2<0 + | source4 | REMEXTANDLOC "mcoml\t%[1],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +com sil $1==4 && $2>=0 + | source4 | + REMEXTANDLOC + "mcoml\t%[1],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | com ste $1==4 | source4 | remove(externals) "mcoml\t%[1],$2" setcc({EXTERNAL4,$2}) | | | -com defined($1) | | remove(ALL) +com defined($1) | STACK | move({CONST4,$1},R0) "jsb\t.com" erase(R0) | | | @@ -2114,11 +2680,18 @@ rol stl $1==4 && inreg($2)==2 erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -rol stl $1==4 | source4 source4 | +rol stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "rotl\t%[1],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +rol stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "rotl\t%[1],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS rol sil $1==4 && inreg($2)==2 | source4 source4 | @@ -2126,10 +2699,16 @@ rol sil $1==4 && inreg($2)==2 "rotl\t%[1],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -rol sil $1==4 | source4 source4 | +rol sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC "rotl\t%[1],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | +rol sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + "rotl\t%[1],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | rol ste $1==4 | source4 source4 | remove(externals) "rotl\t%[1],%[2],$2" @@ -2139,72 +2718,98 @@ rol !defined($1) | source4 | move(%[1],R0) "jsb\t.rol" erase(R0) | | | -ror $1==4 | source4-CONST source4 | +ror $1==4 | source4 source4 | allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],%[a]" setcc(%[a]) | %[a] | | -... | CONST source4 | +... | NC CONST source4 | allocate(%[2],REG) "rotl\t$$%(32-%[1.num]%),%[2],%[a]" setcc(%[a]) | %[a] | | #ifdef REGVARS ror stl $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | remove(regvar($2)) allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | -... | CONST source4 | +... | NC CONST source4 | remove(regvar($2)) "rotl\t$$%(32-%[1.num]%),%[2],%(regvar($2)%)" erase(regvar($2)) setcc(regvar($2)) | | | #endif REGVARS -ror stl $1==4 | source4-CONST source4 | +ror stl $1==4 && $2<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | -... | CONST source4 | + setcc({LOCAL4,LB,$2,4}) | | | +... | NC CONST source4 | remove(displaced) - remove(LOCALS, (%[num] <= $2+3 && %[num]+%[size] > $2)) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) "rotl\t$$%(32-%[1.num]%),%[2],$2(fp)" - setcc({LOCAL4,$2, 4}) | | | + setcc({LOCAL4,LB,$2,4}) | | | +ror stl $1==4 && $2>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + allocate(%[1],REG) + "subl3\t%[1],$$32,%[a]" + "rotl\t%[a],%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | +... | NC CONST source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $2+3 && %[num]+%[size] > $2)) + "rotl\t$$%(32-%[1.num]%),%[2],$2(ap)" + setcc({LOCAL4,AP,$2,4}) | | | #ifdef REGVARS ror sil $1==4 && inreg($2)==2 - | source4-CONST source4 | + | source4 source4 | REMEXTANDLOC allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "rotl\t$$%(32-%[1.num]%),%[2],(%(regvar($2)%))" setcc({regdef4,regvar($2)}) | | | #endif REGVARS -ror sil $1==4 | source4-CONST source4 | +ror sil $1==4 && $2<0 + | source4 source4 | REMEXTANDLOC allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | -... | CONST source4 | +... | NC CONST source4 | REMEXTANDLOC "rotl\t$$%(32-%[1.num]%),%[2],*$2(fp)" setcc({displdef4,LB,tostring($2)}) | | | -ror ste $1==4 | source4-CONST source4 | +ror sil $1==4 && $2>=0 + | source4 source4 | + REMEXTANDLOC + allocate(%[1],REG) + "subl3\t%[1],$$32,%[a]" + "rotl\t%[a],%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | +... | NC CONST source4 | + REMEXTANDLOC + "rotl\t$$%(32-%[1.num]%),%[2],*$2(ap)" + setcc({displdef4,AP,tostring($2)}) | | | +ror ste $1==4 | source4 source4 | remove(externals) allocate(%[1],REG) "subl3\t%[1],$$32,%[a]" "rotl\t%[a],%[2],$2" setcc({EXTERNAL4,$2}) | | | -... | CONST source4 | +... | NC CONST source4 | remove(externals) "rotl\t$$%(32-%[1.num]%),%[2],$2" setcc({EXTERNAL4,$2}) | | | @@ -2213,7 +2818,8 @@ ror !defined($1) | source4 | move(%[1],R0) "jsb\t.ror" erase(R0) | | | -com and $1==4 && $2==4 | source4 source4 | +com and $1==4 && $2==4 + | source4 source4 | allocate(%[1],%[2],REG) "bicl3\t%[1],%[2],%[a]" setcc(%[a]) | %[a] | | (4,4)+%[1]+%[2] @@ -2221,9 +2827,6 @@ com and $1==4 && $2==4 | source4 source4 | "bicl2\t%[1],%[2]" erase(%[2]) setcc(%[2]) | %[2] | | (3,4) + %[1] -... | source4 source4 | - remove(ALL) - "bicl3\t%[1],%[2],(sp)+" | | | (4,7)+%[1]+%[2] #ifdef REGVARS com and stl $1==4 && $2==4 && inreg($3)==2 | source4 source4 | @@ -2232,11 +2835,18 @@ com and stl $1==4 && $2==4 && inreg($3)==2 erase(regvar($3)) setcc(regvar($3)) | | | #endif REGVARS -com and stl $1==4 && $2==4 | source4 source4 | +com and stl $1==4 && $2==4 && $3<0 + | source4 source4 | remove(displaced) - remove(LOCALS, (%[num] <= $3+3 && %[num]+%[size] > $3)) + remove(LOCALS,(%[num] <= $3+3 && %[num]+%[size] > $3)) "bicl3\t%[1],%[2],$3(fp)" - setcc({LOCAL4,$3, 4}) | | | + setcc({LOCAL4,AP,$3,4}) | | | +com and stl $1==4 && $2==4 && $3>=0 + | source4 source4 | + remove(displaced) + remove(LOCALS,(%[num] <= $3+3 && %[num]+%[size] > $3)) + "bicl3\t%[1],%[2],$3(ap)" + setcc({LOCAL4,AP,$3,4}) | | | #ifdef REGVARS com and sil $1==4 && $2==4 && inreg($3)==2 | source4 source4 | @@ -2244,16 +2854,23 @@ com and sil $1==4 && $2==4 && inreg($3)==2 "bicl3\t%[1],%[2],(%(regvar($3)%))" setcc({regdef4,regvar($3)}) | | | #endif REGVARS -com and sil $1==4 && $2==4 | source4 source4 | +com and sil $1==4 && $2==4 && $3<0 + | source4 source4 | REMEXTANDLOC "bicl3\t%[1],%[2],*$3(fp)" setcc({displdef4,LB,tostring($3)}) | | | -com and ste $1==4 &&$2==4 | source4 source4 | +com and sil $1==4 && $2==4 && $3>=0 + | source4 source4 | + REMEXTANDLOC + "bicl3\t%[1],%[2],*$3(ap)" + setcc({displdef4,AP,tostring($3)}) | | | +com and ste $1==4 &&$2==4 + | source4 source4 | remove(externals) "bicl3\t%[1],%[2],$3" setcc({EXTERNAL4,$3}) | | | -com and $1==$2 | | remove(ALL) - move({CONST4, $1}, R0) +com and $1==$2 | STACK | + move({CONST4,$1},R0) "jsb\t.cmand" erase(R0) | | | @@ -2262,11 +2879,11 @@ com and $1==$2 | | remove(ALL) ********************************/ loc inn $1==0 && $2==4 | source4 | - allocate(%[1], REG) + allocate(%[1],REG) "bicl3\t$$~1,%[1],%[a]" setcc(%[a]) | %[a] | | loc inn $2==4 | source4 | - allocate(%[1], REG) + allocate(%[1],REG) "ashl\t$$%(0-$1%),%[1],%[a]" "bicl2\t$$~1,%[a]" setcc(%[a]) | %[a] | | @@ -2327,8 +2944,8 @@ loc inn zne $2==8 && $1>=32 /* Second half. */ remove(ALL) "bitl\t%[2],$$%(1<<($1-32)%)" "jneq\t$3" | | | -inn defined($1) | | remove(ALL) - move({CONST4, $1},R0) +inn defined($1) | STACK | + move({CONST4,$1},R0) "jsb\t.inn" erase(R0) | R1 | | inn !defined($1) | source4 | @@ -2337,8 +2954,8 @@ inn !defined($1) | source4 | "jsb\t.inn" erase(R0) | R1 | | set $1==4 | source4 | | {CONST4,1} %[1] | sli 4 | -set defined($1) | | remove(ALL) - move({CONST4, $1},R0) +set defined($1) | STACK | + move({CONST4,$1},R0) "jsb\t.setx" erase(R0) | | | set !defined($1) | source4 | @@ -2356,48 +2973,24 @@ lae aar $2==4 && rom(1,3)==2 | | | | loc 1 sli 4 ads 4 adp 0-2*rom(1,1) | lae aar $2==4 && rom(1,3)==4 | | | | loc 2 sli 4 ads 4 adp 0-4*rom(1,1) | lae aar $2==4 && rom(1,3)==8 | | | | loc 3 sli 4 ads 4 adp 0-8*rom(1,1) | lae aar $2==4 && defined(rom(1,3)) && rom(1,1)==0 - | source4 source4 | - allocate(%[1],REG) - "mull3\t$$%(rom(1,3)%),%[1],%[a]" - "addl2\t%[2],%[a]" - setcc(%[a]) | %[a] | | (10,20)+%[1]+%[2] -... | NC source4 adispl | - allocate(%[1],REG) - "mull3\t$$%(rom(1,3)%),%[1],%[a]" - "addl2\t%[2.reg],%[a]" - setcc(%[a]) - | {adispl,%[a],%[2.ind]} | | (10,20)+%[1] -... | NC source4 ADDR_LOCAL | + | source4 adispl | allocate(%[1],REG) "mull3\t$$%(rom(1,3)%),%[1],%[a]" - "addl2\tfp,%[a]" - setcc(%[a]) - | {adispl,%[a],tostring(%[2.num])} | | (10,20)+%[1] + | {adisplind1,%[a],%[2.reg],%[2.ind]} | | (8,10)+%[1] ... | NC source4 ADDR_EXTERNAL | allocate(%[1],REG) "mull3\t$$%(rom(1,3)%),%[1],%[a]" - setcc(%[a]) | {adispl,%[a],%[2.ind]} | | (7,16)+%[1] lae aar $2==4 && defined(rom(1,3)) | source4 adispl | allocate(%[1],REG) "mull3\t$$%(rom(1,3)%),%[1],%[a]" - "addl2\t%[2.reg],%[a]" - setcc(%[a]) - | {adispl,%[a], + | {adisplind1,%[a],%[2.reg], %[2.ind]+"+"+tostring(0-rom(1,1)*rom(1,3))} - | | (10,20)+%[1] -... | NC source4 source4 | - allocate(%[1],REG) - "mull3\t$$%(rom(1,3)%),%[1],%[a]" - "addl2\t%[2],%[a]" - setcc(%[a]) - | {adispl,%[a],tostring(0-rom(1,1)*rom(1,3))} - | | (10,20)+%[1]+%[2] + | | (8,10)+%[1] ... | NC source4 ADDR_EXTERNAL | allocate(%[1],REG) "mull3\t$$%(rom(1,3)%),%[1],%[a]" - setcc(%[a]) | {adispl,%[a], %[2.ind]+"+"+tostring(0-rom(1,1)*rom(1,3))} | | (7,16)+%[1] @@ -2420,7 +3013,7 @@ loc sli ads $1==3 && $2==4 && $3==4 | {adispldefind8,%[1],%[2.reg],%[2.ind]} | | ... | reg4 EXTERNAL4 | | {aextdefind8,%[1],%[2.ind]} | | -aar $1==4 | | remove(ALL) +aar $1==4 | STACK | "jsb\t.aar4" | R0 | | aar !defined($1) | source4 | remove(ALL) @@ -2429,14 +3022,14 @@ aar !defined($1) | source4 | erase(R0) | R0 | | lae sar defined(rom(1,3)) | | | | lae $1 aar $2 sti rom(1,3) | lae lar defined(rom(1,3)) | | | | lae $1 aar $2 loi rom(1,3) | -sar $1==4 | | remove(ALL) +sar $1==4 | STACK | "jsb\t.sar4" | | | sar !defined($1) | source4 | remove(ALL) move(%[1],R0) "jsb\t.sar" erase(R0) | | | -lar $1==4 | | remove(ALL) +lar $1==4 | STACK | "jsb\t.lar4" | | | lar !defined($1) | source4 | remove(ALL) @@ -2566,7 +3159,7 @@ cms $1==4 | source4 source4 | #endif setcc(%[a]) erase(%[a]) | %[a] | | -cms defined($1) | | remove(ALL) +cms defined($1) | STACK | move({CONST1,$1},R0) "jsb\t.cms" setcc(R0) @@ -2797,8 +3390,7 @@ cmi tlt $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 tlt | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 tlt | cmi tle $1==4 | source4 source4 | allocate(REG={CONST4,0}) "cmpl\t%[1],%[2]" @@ -2811,8 +3403,7 @@ cmi tle $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 tle | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 tle | cmi teq $1==4 | source4 source4 | allocate(REG={CONST4,0}) "cmpl\t%[1],%[2]" @@ -2825,8 +3416,7 @@ cmi teq $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 teq | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 teq | cmi tne $1==4 | source4 source4 | allocate(REG={CONST4,0}) "cmpl\t%[1],%[2]" @@ -2839,8 +3429,7 @@ cmi tne $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 tne | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 tne | cmi tge $1==4 | source4 source4 | allocate(REG={CONST4,0}) "cmpl\t%[1],%[2]" @@ -2853,8 +3442,7 @@ cmi tge $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 tge | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 tge | cmi tgt $1==4 | source4 source4 | allocate(REG={CONST4,0}) "cmpl\t%[1],%[2]" @@ -2867,8 +3455,7 @@ cmi tgt $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | -... | NC source1or2 source1or2 | - | %[2] %[1] | cmu 4 tgt | +... | NC source1or2 source1or2 | | %[2] %[1] | cmu 4 tgt | cmi tlt and $1==4 && $3==4 | source4 source4 sreg4 | "cmpl\t%[2],%[1]" @@ -3013,6 +3600,7 @@ cmi tgt ior $1==4 && $3==4 #endif setcc(%[3]) erase(%[3]) | %[3] | | +#ifdef FLOAT4 cmf tlt $1==4 | source4 source4 | allocate(REG={CONST1,0}) "cmpf\t%[1],%[2]" @@ -3085,6 +3673,8 @@ cmf tgt $1==4 | source4 source4 | #endif erase(%[a]) setcc(%[a]) | %[a] | | +#endif FLOAT4 +#ifdef FLOAT8 cmf tlt $1==8 | source8 source8 | allocate(%[1],%[2],REG) "cmpd\t%[1],%[2]" @@ -3182,6 +3772,7 @@ cmf tgt $1==8 | source8 source8 | #endif erase(%[a]) setcc(%[a]) | %[a] | | +#endif FLOAT8 /* Remember that cmu was replaced by cmp. */ cmp tlt | source4 source4 | allocate(REG={CONST1,0}) @@ -3550,7 +4141,7 @@ zlt | source4 STACK | test(%[1]) "jlss\t$1" samecc | | | -... | NC source1or2 | | | | +... | NC source1or2 | | %[1] | asp 4 | zle | source4 STACK | test(%[1]) "jleq\t$1" @@ -3568,7 +4159,7 @@ zge | source4 STACK | test(%[1]) "jgeq\t$1" samecc | | | -... | NC source1or2 | | | bra $1 | +... | NC source1or2 | | %[1] | asp 4 bra $1 | zgt | source4 STACK | test(%[1]) "jgtr\t$1" @@ -3641,36 +4232,38 @@ cms zne $1==4 | | | | cmp zne $2 | * Group 14 : Procedure call instructions * ************************************************/ -cai | | remove(ALL) - "jsb\t*(sp)+" | | | (2,10) -... | reg4 | +cai asp $2%4 == 0 && $2>=0 + | reg4 | + remove(ALL) + "calls\t$$%($2/4%),(%[1])" | | | +cai | reg4 | remove(ALL) - "jsb\t(%[1])" | | | (2,7) + "calls\t$$0,(%[1])" | | | +cal asp $2%4 == 0 && $2>=0 + | | remove(ALL) + "calls\t$$%($2/4%),$1" | | | cal | | remove(ALL) - "jsb\t$1" | | | -lfr $1==4 | | | R0 | | -lfr $1==8 | | | QR0 | | -asp ret $2==0 | | | | ret 0 | -ass ret $2==0 | | | | ret 0 | -asp lfr ret $2==$3 | | | | ret 0 | -ass lfr ret $2==$3 | | | | ret 0 | -lfr ret $1==$2 | | | | ret 0 | -#ifdef REGVARS -ret $1==0 | | remove(ALL) - return | | | -#else REGVARS -ret $1==0 | | remove(ALL) - "movl\tfp,sp" - "movl\t(sp)+,fp" - "rsb" | | | -#endif REGVARS -ret $1==4 | bigsource4 | - move(%[1],R0) | | ret 0 | -ret $1==8 | bigsource8 | - move(%[1],QR0) | | ret 0 | -... | bigsource4 bigsource4 | + "calls\t$$0,$1" | | | +lfr $1==4 | | | R0 | | +lfr $1==8 | | | QR0 | | +asp ret $2==0 | | "ret" | | | +ass ret $2==0 | | "ret" | | | +asp lfr ret $2==$3 | | "ret" | | | +ass lfr ret $2==$3 | | "ret" | | | +lfr ret $1==$2 | | "ret" | | | +ret $1==0 | | "ret" | | | +ret $1==4 | NC bigsource4 | move(%[1],R0) - move(%[2],R1) | | ret 0 | + "ret" | | | +... | STACK | + "movl\t(sp)+,r0" + "ret" | | | +ret $1==8 | NC bigsource8 | + move(%[1],QR0) + "ret" | | | +... | STACK | + "movq\t(sp)+,r0" + "ret" | | | /******************************** * Group 15 : Miscellaneous * @@ -3679,22 +4272,22 @@ ret $1==8 | bigsource8 | #ifdef REGVARS asp $1==4 | bigsource4 - regch4 | | | | #else REGVARS -asp $1==4 | NC bigsource4 | | | | +asp $1==4 | NC bigsource4 | | | | #endif REGVARS -... | | remove(ALL) +... | STACK | "tstl\t(sp)+" | | | (2,7) -asp $1>0 | | remove(ALL) +asp $1>0 | STACK | "addl2\t$$$1,sp" | | | asp $1==(0-4) | | | {CONST4,0} | | asp $1==(0-8) | | | {CONST8,"0"} | | -asp | | remove(ALL) +asp | STACK | "subl2\t$$%(0-$1%),sp" | | | ass $1==4 | source4 | remove(ALL) "addl2\t%[1],sp" | | | ass !defined($1) | source4 | remove(ALL) - move(%[1],R2) + move(%[1],R2) /* R2 <= leave return area intact. */ "jsb\t.ass" erase(R2) | | | blm $1==4 | nonexist1 nonexist1 | @@ -3715,7 +4308,7 @@ blm $1==16 | sreg4 sreg4 | erase(%[1]) erase(%[2]) | | | blm | sreg4 sreg4 | remove(ALL) - allocate(REG={CONST1, $1/4}) + allocate(REG={CONST1,$1/4}) #ifdef LOCLABS "1:\nmovl\t(%[2])+,(%[1])+" "sobgtr\t%[a],1b" @@ -3725,8 +4318,7 @@ blm | sreg4 sreg4 | #endif erase(%[1]) erase(%[2]) erase(%[a]) | | | -bls $1==4 | | - remove(ALL) +bls $1==4 | | remove(ALL) move({CONST1,4},R0) "jsb\t.bls" erase(R0) | | | @@ -3735,36 +4327,29 @@ bls !defined($1) | source4 | move(%[1],R0) "jsb\t.bls" erase(R0) | | | -csa $1==4 | | remove(ALL) - "jmp\t.csa4" | | | +csa $1==4 | STACK | + "jmp\t.csa4" | | | csa !defined($1) | source4 | remove(ALL) move(%[1],R0) "jmp\t.csa" erase(R0) | | | -csb $1==4 | | remove(ALL) - "jmp\t.csb4" | | | +csb $1==4 | STACK | + "jmp\t.csb4" | | | csb !defined($1) | source4 | remove(ALL) move(%[1],R0) "jmp\t.csb" erase(R0) | | | -dch | | | | loi 4 | +dch | reg4 | | {displ4,%[1],"12"} | | | dup stl $1==4 | | | | stl $2 lol $2 | -#ifdef REGVARS -dup sil $1==4 && inreg($2)==2 - | bigsource4 | - REMEXTANDLOC - move(%[1],{regdef4,regvar($2)}) - | {regdef4,regvar($2)} | | -#endif REGVARS -dup $1==4 | reg4+regdef4 | | %[1] %[1] | | +dup $1==4 | dups4 | | %[1] %[1] | | #ifdef REGVARS dup $1==8 | bigsource8-regch8 | | %[1] %[1] | | #else REGVARS dup $1==8 | bigsource8 | | %[1] %[1] | | #endif REGVARS -dup | | remove(ALL) +dup | STACK | allocate(REG,REG={CONST1,$1/4}) "addl3\tsp,$$$1,%[a]" #ifdef LOCLABS @@ -3795,7 +4380,7 @@ dus !defined($1) | source4 | erase(R0) | | | exg $1==4 | bigsource4 bigsource4 | | %[1] %[2] | | exg $1==8 | bigsource8 bigsource8 | | %[1] %[2] | | -exg defined($1) | | remove(ALL) +exg defined($1) | STACK | move({CONST4,$1},R0) "jsb\t.exg" erase(R0) | | | @@ -3809,11 +4394,11 @@ lim | | allocate(REG) "movl\t.trpim,%[a]" | %[a] | | lin | | "movl\t$$$1,hol0" | | | lni | | "incl\thol0" | | | -gto | | remove(ALL) +gto | STACK | "pushl\t$$$1" "jmp\t.gto" | | | lor $1==0 | | | LB | | -lor $1==1 | | remove(ALL) +lor $1==1 | STACK | allocate(REG) "movl\tsp,%[a]" | %[a] | | lor $1==2 | | allocate(REG) @@ -3823,12 +4408,12 @@ lpb | bigsource4 | move(%[1],R0) "jsb\t.lpb" erase(R0) | R0 | | -mon | | remove(ALL) +mon | STACK | "jsb\t.mon" | | | -nop | | remove(ALL) +nop | STACK | "jsb\t.nop" | | | #ifdef DORCK -rck $1==4 | | remove(ALL) +rck $1==4 | STACK | "jsb\t.rck4" | | | rck !defined($1) | source4 | remove(ALL) @@ -3844,21 +4429,21 @@ rck defined($1) | bigsource4 | | | | rck !defined($1) | bigsource4 bigsource4 | | | | #endif REGVARS #endif DORCK -rtt | | | | ret 0 | -sig | | remove(ALL) - "jsb\t.sig" | | | -sim | | remove(ALL) - "jsb\t.sim" | | | +rtt | | "ret" | | | +sig | STACK | + "jsb\t.sig" | | | +sim | STACK | + "jsb\t.sim" | | | str $1==0 | source4 | remove(ALL) - "movl\t%[1],fp" | | | + "jsb\t.strlb" | | | str $1==1 | source4 | remove(ALL) - "movl\t%[1],sp" | | | -str $1==2 | | remove(ALL) - "jsb\t.strhp" | | | -trp | | remove(ALL) - "jsb\t.trp" | | | + "movl\t%[1],sp" | | | +str $1==2 | STACK | + "jsb\t.strhp" | | | +trp | STACK | + "jsb\t.trp" | | | /******************************** * Coercions: * @@ -3872,6 +4457,10 @@ trp | | remove(ALL) | source2 | allocate(%[1],REG=%[1]) | %[a] | | | bigsource4 | allocate(%[1],REG=%[1]) | %[a] | | | bigsource8 | allocate(%[1],QREG=%[1]) | %[a] | | +| reg4 | | {adispl,%[1],"0"} | | +| ADDR_LOCAL | | {adispl,%[1.reg],tostring(%[1.num])} | | +| bigsource4-adispl-reg4-ADDR_LOCAL | + allocate(%[1],REG=%[1]) | {adispl,%[a],"0"} | | /******************************** * B: From STACK to register * @@ -3894,50 +4483,46 @@ trp | | remove(ALL) | regdef8 | | {displ4,%[1.reg],"4"} {regdef4,%[1.reg]} | | | displ8 | | {displ4,%[1.reg],%[1.ind]+"+4"} {displ4,%[1.reg],%[1.ind]} | | -| LOCAL8 | | {LOCAL4,%[1.num]+4,4} {LOCAL4,%[1.num],4} | | +| LOCAL8 | | {LOCAL4,%[1.reg],%[1.num]+4,4} {LOCAL4,%[1.reg],%[1.num],4}| | | EXTERNAL8 | | {EXTERNAL4,%[1.ind]+"+4"} {EXTERNAL4,%[1.ind]} | | | QREG | | %[1.2] %[1.1] | | | regdef4 | | {displ4,%[1.reg],"0"} | | -| ADDR_LOCAL | | {adispl,LB,tostring(%[1.num])} | | -| reg4 | | {adispl,%[1],"0"} | | -| LOCAL4 | | {displ4,LB,tostring(%[1.num])} | | -| nonexist+source4-reg4-adispl-ADDR_LOCAL | - allocate(%[1],REG=%[1]) | {adispl,%[a],"0"} | | +| LOCAL4 | | {displ4,%[1.reg],tostring(%[1.num])} | | MOVES: -(CONST %[num]==0, source1, "clrb\t%[2]", (2,4)+%[2]) -(CONST %[num]==0, source2, "clrw\t%[2]", (2,4)+%[2]) -(CONST %[num]==0, source4, "clrl\t%[2]" +(CONST %[num]==0,source1, "clrb\t%[2]", (2,4)+%[2]) +(CONST %[num]==0,source2, "clrw\t%[2]", (2,4)+%[2]) +(CONST %[num]==0,source4, "clrl\t%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST %[num]<0 && ufit(0-%[num],6), source2, +(CONST %[num]<0 && ufit(0-%[num],6),source2, "mnegw\t$$%(0-%[1.num]%),%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST ufit(%[num],8) && !ufit(%[num],6), source2, +(CONST ufit(%[num],8) && !ufit(%[num],6),source2, "movzbw\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST sfit(%[num],8) && !ufit(%[num],6), source2, +(CONST sfit(%[num],8) && !ufit(%[num],6),source2, "cvtbw\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST %[num]<0 && ufit(0-%[num],6), source4, +(CONST %[num]<0 && ufit(0-%[num],6),source4, "mnegl\t$$%(0-%[1.num]%),%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST ufit(%[num],8) && !ufit(%[num],6), source4, +(CONST ufit(%[num],8) && !ufit(%[num],6),source4, "movzbl\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST sfit(%[num],8) && !ufit(%[num],6), source4, +(CONST sfit(%[num],8) && !ufit(%[num],6),source4, "cvtbl\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST ufit(%[num],16) && !ufit(%[num],6), source4, +(CONST ufit(%[num],16) && !ufit(%[num],6),source4, "movzwl\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST sfit(%[num],16) && !ufit(%[num],6), source4, +(CONST sfit(%[num],16) && !ufit(%[num],6),source4, "cvtwl\t%[1],%[2]" setcc(%[2]), (2,4)+%[2]) -(CONST8 %[ind]=="0", source8, "clrq\t%[2]" +(CONST8 %[ind]=="0",source8, "clrq\t%[2]" setcc(%[2]), (2,4)+%[2]) -(FCONST8 %[num]==0, source8, "clrq\t%[2]" +(FCONST8 %[num]==0,source8, "clrq\t%[2]" setcc(%[2]), (2,4)+%[2]) -(FCONST8, source8, "movd\t%[1],%[2]" +(FCONST8,source8, "movd\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) #ifdef REGVARS /* Tokens with side effects should not be remembered. */ @@ -3950,35 +4535,35 @@ MOVES: (reginc8+regdec8,reg8, "movq\t%[1],%[2]" setcc(%[2]) erase(%[2]),(3,7)+%[1]) #endif REGVARS -(source8, source8, "movq\t%[1],%[2]" +(source8,source8, "movq\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source4, source4, "movl\t%[1],%[2]" +(source4,source4, "movl\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source2, source2, "movw\t%[1],%[2]" +(source2,source2, "movw\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source1, source1, "movb\t%[1],%[2]" +(source1,source1, "movb\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source1, source2, "movzbw\t%[1],%[2]" +(source1,source2, "movzbw\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source1, source4, "movzbl\t%[1],%[2]" +(source1,source4, "movzbl\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source2, source4, "movzwl\t%[1],%[2]" +(source2,source4, "movzwl\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source2, source1, "cvtwb\t%[1],%[2]" +(source2,source1, "cvtwb\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source4, source1, "cvtlb\t%[1],%[2]" +(source4,source1, "cvtlb\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(source4, source2, "cvtlw\t%[1],%[2]" +(source4,source2, "cvtlw\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(aind1, source4, "movab\t%[1],%[2]" +(aind1,source4, "movab\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(aind2, source4, "movaw\t%[1],%[2]" +(aind2,source4, "movaw\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(aind4, source4, "moval\t%[1],%[2]" +(aind4,source4, "moval\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(aind8, source4, "movaq\t%[1],%[2]" +(aind8,source4, "movaq\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) -(nonexist1, source4, "movab\t%[1],%[2]" +(nonexist1,source4, "movab\t%[1],%[2]" setcc(%[2]), (3,4)+%[1]+%[2]) TESTS: (source1, "tstb\t%[1]" ,(2,4) + %[1]) @@ -3987,30 +4572,30 @@ TESTS: STACKS: -(CONST %[num]==0, , +(CONST %[num]==0,, "clrl\t-(sp)", (2,7)) -(CONST %[num]<0 && ufit(0-%[num],6), , +(CONST %[num]<0 && ufit(0-%[num],6),, "mnegl\t$$%(0-%[1.num]%),-(sp)", (2,7) + %[1]) -(CONST ufit(%[num],6), , +(CONST ufit(%[num],6),, "pushl\t%[1]", (2,7) + %[1]) -(CONST8 %[ind]=="0", , +(CONST8 %[ind]=="0",, "clrq\t-(sp)", (2,10)) -(CONST sfit(%[num],8), , +(CONST sfit(%[num],8),, "cvtbl\t%[1],-(sp)", (3,7) + %[1]) -(source1, , "movzbl\t%[1],-(sp)", (3,7) + %[1]) -(CONST sfit(%[num],16), , +(source1,, "movzbl\t%[1],-(sp)", (3,7) + %[1]) +(CONST sfit(%[num],16),, "cvtwl\t%[1],-(sp)", (3,7) + %[1]) -(source2, , "movzwl\t%[1],-(sp)", (3,7) + %[1]) -(source4, , "pushl\t%[1]" +(source2,, "movzwl\t%[1],-(sp)", (3,7) + %[1]) +(source4,, "pushl\t%[1]" setcc(%[1]), (2,7) + %[1]) -(source8, , "movq\t%[1],-(sp)" +(source8,, "movq\t%[1],-(sp)" setcc(%[1]), (3,10)+ %[1]) -(nonexist1, , "pushal\t%[1]", (2,7) + %[1]) -(FCONST8 %[num]==0, , +(nonexist1,, "pushal\t%[1]", (2,7) + %[1]) +(FCONST8 %[num]==0,, "clrq\t-(sp)", (2,10)) -(FCONST8, , "movd\t%[1],-(sp)", (3,10) + %[1]) -(aind1, , "pushab\t%[1]", (2,7) + %[1]) -(aind2, , "pushaw\t%[1]", (2,7) + %[1]) -(aind4, , "pushal\t%[1]", (2,7) + %[1]) -(aind8, , "pushaq\t%[1]", (2,7) + %[1]) +(FCONST8,, "movd\t%[1],-(sp)", (3,10) + %[1]) +(aind1,, "pushab\t%[1]", (2,7) + %[1]) +(aind2,, "pushaw\t%[1]", (2,7) + %[1]) +(aind4,, "pushal\t%[1]", (2,7) + %[1]) +(aind8,, "pushaq\t%[1]", (2,7) + %[1])