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