fixed some strange constructions
This commit is contained in:
		
							parent
							
								
									8401d7b9ec
								
							
						
					
					
						commit
						dc500c3463
					
				
					 4 changed files with 200 additions and 108 deletions
				
			
		| 
						 | 
					@ -29,7 +29,8 @@ Something very wrong here!
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define small(x) ((x)>=1 && (x)<=8)
 | 
					#define small(x) ((x)>=1 && (x)<=8)
 | 
				
			||||||
#define abs_small(x)	((x)>=0-8 && (x)<=8)
 | 
					#define directadd(x)	(small(x) || (x)>128)
 | 
				
			||||||
 | 
					#define directsub(x)	(directadd(0-x))
 | 
				
			||||||
#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
					#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
				
			||||||
#define low8(x) ((x) & 0377)
 | 
					#define low8(x) ((x) & 0377)
 | 
				
			||||||
#define low16(x) ((x) & 0177777)
 | 
					#define low16(x) ((x) & 0177777)
 | 
				
			||||||
| 
						 | 
					@ -49,11 +50,11 @@ TIMEFACTOR = 1/2
 | 
				
			||||||
PROPERTIES
 | 
					PROPERTIES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
D_REG			/* data registers */
 | 
					D_REG			/* data registers */
 | 
				
			||||||
A_REG(EM_PSIZE)		/* address registers */
 | 
					A_REG(4)		/* address registers */
 | 
				
			||||||
DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
					DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
				
			||||||
AA_REG(EM_PSIZE)	/* allocatable A_REG, may not be a register variable */
 | 
					AA_REG(4)		/* allocatable A_REG, may not be a register variable */
 | 
				
			||||||
RD_REG			/* data register, register var */
 | 
					RD_REG			/* data register, register var */
 | 
				
			||||||
RA_REG(EM_PSIZE)	/* address register, register var */
 | 
					RA_REG(4)		/* address register, register var */
 | 
				
			||||||
#if WORD_SIZE==2
 | 
					#if WORD_SIZE==2
 | 
				
			||||||
D_REG4(4)		/* data register, 4 bytes */
 | 
					D_REG4(4)		/* data register, 4 bytes */
 | 
				
			||||||
DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
					DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
				
			||||||
| 
						 | 
					@ -2603,31 +2604,31 @@ pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {post_inc1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Normally, LLP sti will ve optimzed into sil */
 | 
					/* Normally, LLP sti will ve optimzed into sil */
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {post_inc2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc2, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {post_inc4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc4, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
					pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
					pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
					pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
| 
						 | 
					@ -2654,35 +2655,42 @@ pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
					pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directadd($3)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directsub($3)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
| 
						 | 
					@ -2690,37 +2698,52 @@ pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directadd($3)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					 | 
				
			||||||
    gen add_l %b, {DLOCAL, $1}
 | 
					 | 
				
			||||||
    killreg %a
 | 
					 | 
				
			||||||
			yields	%a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
					 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && abs_small($2)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directsub($3)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
 | 
					    gen add_l %b, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && abs_small($2)
 | 
					pat LLP adp SLP $1==$3 && directadd($2)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && directsub($2)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3
 | 
					pat LLP adp SLP $1==$3
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
					pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,8 @@ Something very wrong here!
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define small(x) ((x)>=1 && (x)<=8)
 | 
					#define small(x) ((x)>=1 && (x)<=8)
 | 
				
			||||||
#define abs_small(x)	((x)>=0-8 && (x)<=8)
 | 
					#define directadd(x)	(small(x) || (x)>128)
 | 
				
			||||||
 | 
					#define directsub(x)	(directadd(0-x))
 | 
				
			||||||
#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
					#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
				
			||||||
#define low8(x) ((x) & 0377)
 | 
					#define low8(x) ((x) & 0377)
 | 
				
			||||||
#define low16(x) ((x) & 0177777)
 | 
					#define low16(x) ((x) & 0177777)
 | 
				
			||||||
| 
						 | 
					@ -49,11 +50,11 @@ TIMEFACTOR = 1/2
 | 
				
			||||||
PROPERTIES
 | 
					PROPERTIES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
D_REG			/* data registers */
 | 
					D_REG			/* data registers */
 | 
				
			||||||
A_REG(EM_PSIZE)		/* address registers */
 | 
					A_REG(4)		/* address registers */
 | 
				
			||||||
DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
					DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
				
			||||||
AA_REG(EM_PSIZE)	/* allocatable A_REG, may not be a register variable */
 | 
					AA_REG(4)		/* allocatable A_REG, may not be a register variable */
 | 
				
			||||||
RD_REG			/* data register, register var */
 | 
					RD_REG			/* data register, register var */
 | 
				
			||||||
RA_REG(EM_PSIZE)	/* address register, register var */
 | 
					RA_REG(4)		/* address register, register var */
 | 
				
			||||||
#if WORD_SIZE==2
 | 
					#if WORD_SIZE==2
 | 
				
			||||||
D_REG4(4)		/* data register, 4 bytes */
 | 
					D_REG4(4)		/* data register, 4 bytes */
 | 
				
			||||||
DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
					DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
				
			||||||
| 
						 | 
					@ -2603,31 +2604,31 @@ pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {post_inc1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Normally, LLP sti will ve optimzed into sil */
 | 
					/* Normally, LLP sti will ve optimzed into sil */
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {post_inc2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc2, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {post_inc4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc4, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
					pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
					pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
					pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
| 
						 | 
					@ -2654,35 +2655,42 @@ pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
					pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directadd($3)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directsub($3)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
| 
						 | 
					@ -2690,37 +2698,52 @@ pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directadd($3)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					 | 
				
			||||||
    gen add_l %b, {DLOCAL, $1}
 | 
					 | 
				
			||||||
    killreg %a
 | 
					 | 
				
			||||||
			yields	%a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
					 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && abs_small($2)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directsub($3)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
 | 
					    gen add_l %b, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && abs_small($2)
 | 
					pat LLP adp SLP $1==$3 && directadd($2)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && directsub($2)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3
 | 
					pat LLP adp SLP $1==$3
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
					pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,8 @@ Something very wrong here!
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define small(x) ((x)>=1 && (x)<=8)
 | 
					#define small(x) ((x)>=1 && (x)<=8)
 | 
				
			||||||
#define abs_small(x)	((x)>=0-8 && (x)<=8)
 | 
					#define directadd(x)	(small(x) || (x)>128)
 | 
				
			||||||
 | 
					#define directsub(x)	(directadd(0-x))
 | 
				
			||||||
#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
					#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
				
			||||||
#define low8(x) ((x) & 0377)
 | 
					#define low8(x) ((x) & 0377)
 | 
				
			||||||
#define low16(x) ((x) & 0177777)
 | 
					#define low16(x) ((x) & 0177777)
 | 
				
			||||||
| 
						 | 
					@ -49,11 +50,11 @@ TIMEFACTOR = 1/2
 | 
				
			||||||
PROPERTIES
 | 
					PROPERTIES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
D_REG			/* data registers */
 | 
					D_REG			/* data registers */
 | 
				
			||||||
A_REG(EM_PSIZE)		/* address registers */
 | 
					A_REG(4)		/* address registers */
 | 
				
			||||||
DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
					DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
				
			||||||
AA_REG(EM_PSIZE)	/* allocatable A_REG, may not be a register variable */
 | 
					AA_REG(4)		/* allocatable A_REG, may not be a register variable */
 | 
				
			||||||
RD_REG			/* data register, register var */
 | 
					RD_REG			/* data register, register var */
 | 
				
			||||||
RA_REG(EM_PSIZE)	/* address register, register var */
 | 
					RA_REG(4)		/* address register, register var */
 | 
				
			||||||
#if WORD_SIZE==2
 | 
					#if WORD_SIZE==2
 | 
				
			||||||
D_REG4(4)		/* data register, 4 bytes */
 | 
					D_REG4(4)		/* data register, 4 bytes */
 | 
				
			||||||
DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
					DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
				
			||||||
| 
						 | 
					@ -2603,31 +2604,31 @@ pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {post_inc1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Normally, LLP sti will ve optimzed into sil */
 | 
					/* Normally, LLP sti will ve optimzed into sil */
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {post_inc2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc2, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {post_inc4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc4, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
					pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
					pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
					pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
| 
						 | 
					@ -2654,35 +2655,42 @@ pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
					pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directadd($3)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directsub($3)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
| 
						 | 
					@ -2690,37 +2698,52 @@ pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directadd($3)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					 | 
				
			||||||
    gen add_l %b, {DLOCAL, $1}
 | 
					 | 
				
			||||||
    killreg %a
 | 
					 | 
				
			||||||
			yields	%a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
					 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && abs_small($2)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directsub($3)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
 | 
					    gen add_l %b, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && abs_small($2)
 | 
					pat LLP adp SLP $1==$3 && directadd($2)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && directsub($2)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3
 | 
					pat LLP adp SLP $1==$3
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
					pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,8 @@ Something very wrong here!
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define small(x) ((x)>=1 && (x)<=8)
 | 
					#define small(x) ((x)>=1 && (x)<=8)
 | 
				
			||||||
#define abs_small(x)	((x)>=0-8 && (x)<=8)
 | 
					#define directadd(x)	(small(x) || (x)>128)
 | 
				
			||||||
 | 
					#define directsub(x)	(directadd(0-x))
 | 
				
			||||||
#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
					#define nicesize(x) ((x)==1||(x)==2||(x)==4||(x)==8)
 | 
				
			||||||
#define low8(x) ((x) & 0377)
 | 
					#define low8(x) ((x) & 0377)
 | 
				
			||||||
#define low16(x) ((x) & 0177777)
 | 
					#define low16(x) ((x) & 0177777)
 | 
				
			||||||
| 
						 | 
					@ -49,11 +50,11 @@ TIMEFACTOR = 1/2
 | 
				
			||||||
PROPERTIES
 | 
					PROPERTIES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
D_REG			/* data registers */
 | 
					D_REG			/* data registers */
 | 
				
			||||||
A_REG(EM_PSIZE)		/* address registers */
 | 
					A_REG(4)		/* address registers */
 | 
				
			||||||
DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
					DD_REG			/* allocatable D_REG, may not be a register variable */
 | 
				
			||||||
AA_REG(EM_PSIZE)	/* allocatable A_REG, may not be a register variable */
 | 
					AA_REG(4)		/* allocatable A_REG, may not be a register variable */
 | 
				
			||||||
RD_REG			/* data register, register var */
 | 
					RD_REG			/* data register, register var */
 | 
				
			||||||
RA_REG(EM_PSIZE)	/* address register, register var */
 | 
					RA_REG(4)		/* address register, register var */
 | 
				
			||||||
#if WORD_SIZE==2
 | 
					#if WORD_SIZE==2
 | 
				
			||||||
D_REG4(4)		/* data register, 4 bytes */
 | 
					D_REG4(4)		/* data register, 4 bytes */
 | 
				
			||||||
DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
					DD_REG4(4)		/* allocatable D_REG, 4 bytes */
 | 
				
			||||||
| 
						 | 
					@ -2603,31 +2604,31 @@ pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==1 && $4==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {post_inc1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Normally, LLP sti will ve optimzed into sil */
 | 
					/* Normally, LLP sti will ve optimzed into sil */
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==2 && $4==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {post_inc2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc2, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
					pat LLP sti LLP adp SLP $1==$3 && $1==$5 && $2==4 && $4==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {post_inc4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc4, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
					pat LLP LLP adp SLP sti $1==$2 && $1==$4 && $3==WORD_SIZE && $5==WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
					pat sil LLP adp SLP $1==$2 && $1==$4 && $3==WORD_SIZE && inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {post_inc_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
					pat LLP adp SLP LLP loi $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
| 
						 | 
					@ -2654,35 +2655,42 @@ pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-1 && $5==1 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any1
 | 
					with any1
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_b %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec1, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-2 && $5==2 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any2
 | 
					with any2
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_w %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec2, regvar($1, reg_pointer)}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
					pat LLP adp SLP LLP sti $1==$3 && $1==$4 && $2==0-4 && $5==4 &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any4
 | 
					with any4
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_l %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec4, regvar($1, reg_pointer)}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
					pat LLP adp SLP sil $1==$3 && $1==$4 && $2==0-WORD_SIZE &&
 | 
				
			||||||
						inreg($1)==reg_pointer
 | 
											inreg($1)==reg_pointer
 | 
				
			||||||
with any_int-sconsts
 | 
					with any_int-sconsts
 | 
				
			||||||
    kills allexceptcon, regvar($1, reg_pointer)
 | 
					    kills allexceptcon, regvar($1, reg_pointer)
 | 
				
			||||||
    gen move_i %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
					    gen move %1, {pre_dec_int, regvar($1, reg_pointer)}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directadd($3)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer && directsub($3)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
| 
						 | 
					@ -2690,37 +2698,52 @@ pat LLP LLP adp SLP $1==$2 && $1==$4 && inreg($1)==reg_pointer
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4 && abs_small($3)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directadd($3)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
					 | 
				
			||||||
    gen add_l %b, {DLOCAL, $1}
 | 
					 | 
				
			||||||
    killreg %a
 | 
					 | 
				
			||||||
			yields	%a
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
					 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses AA_REG = {DLOCAL, $1}
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $3}, {DLOCAL, $1}
 | 
				
			||||||
    killreg %a
 | 
					    killreg %a
 | 
				
			||||||
			yields	%a
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && abs_small($2)
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4 && directsub($3)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$3}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP LLP adp SLP $1==$2 && $1==$4
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    uses AA_REG = {DLOCAL, $1}, DD_REG4 = {const4, $3}
 | 
				
			||||||
 | 
					    gen add_l %b, {DLOCAL, $1}
 | 
				
			||||||
 | 
					    killreg %a
 | 
				
			||||||
 | 
								yields	%a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directadd($2)
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer && directsub($2)
 | 
				
			||||||
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
					pat LLP adp SLP $1==$3 && inreg($1)==reg_pointer
 | 
				
			||||||
    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
					    kills regvar($1, reg_pointer), all_regind %reg==regvar($1, reg_pointer)
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3 && abs_small($2)
 | 
					pat LLP adp SLP $1==$3 && directadd($2)
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    uses DD_REG4 = {const4, $2}
 | 
					    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
				
			||||||
    gen add_l %a, {DLOCAL, $1}
 | 
					
 | 
				
			||||||
 | 
					pat LLP adp SLP $1==$3 && directsub($2)
 | 
				
			||||||
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
 | 
					    gen sub_l {const4, 0-$2}, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pat LLP adp SLP $1==$3
 | 
					pat LLP adp SLP $1==$3
 | 
				
			||||||
    kills all_indir, DLOCAL %bd==$1
 | 
					    kills all_indir, DLOCAL %bd==$1
 | 
				
			||||||
    gen add_l {const4, $2}, {DLOCAL, $1}
 | 
					    uses DD_REG4 = {const4, $2}
 | 
				
			||||||
 | 
					    gen add_l %a, {DLOCAL, $1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if WORD_SIZE!=2
 | 
					#if WORD_SIZE!=2
 | 
				
			||||||
pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
					pat lil lil adp sil sti $1==$2 && $1==$4 && inreg($1)==reg_pointer && $5<=4
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue