Merge pull request #149 from davidgiven/dtrg-arraysizes
i80: more code size improvements.
This commit is contained in:
		
						commit
						ada4d0806b
					
				
					 2 changed files with 247 additions and 224 deletions
				
			
		|  | @ -10,10 +10,13 @@ | |||
|     mvi a, 0xc3     ! jmp <a16> | ||||
|     sta 0x08 | ||||
|     sta 0x10 | ||||
|     sta 0x18 | ||||
|     lxi h, rst1 | ||||
|     shld 0x09 | ||||
|     lxi h, rst2 | ||||
|     shld 0x11 | ||||
|     lxi h, rst3 | ||||
|     shld 0x19 | ||||
|     ret | ||||
| 
 | ||||
|     ! de = [bc+const1] (remember bc is the frame pointer) | ||||
|  | @ -52,3 +55,18 @@ rst2: | |||
|     mov m, d | ||||
|     ret | ||||
| 
 | ||||
|     ! hl = bc+const1 | ||||
| rst3: | ||||
|     pop h | ||||
|     mov a, m | ||||
|     inx h | ||||
|     push h | ||||
| 
 | ||||
|     mov l, a | ||||
|     ral | ||||
|     sbb a | ||||
|     mov h, a | ||||
| 
 | ||||
|     dad b | ||||
|     ret | ||||
|      | ||||
|  | @ -249,8 +249,8 @@ pat loc sfit($1, 8) | |||
| pat loc | ||||
|    yields {const2, $1} | ||||
|     | ||||
| pat ldc					yields {const2,highw($1)} | ||||
| 					       {const2,loww($1)} | ||||
| pat ldc | ||||
|    yields {const2, highw($1)} {const2, loww($1)} | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat lol sfit($1, 8) | ||||
|  | @ -272,43 +272,45 @@ pat lol | |||
| 
 | ||||
| pat loe | ||||
|    uses hlreg | ||||
| gen lhld {label,$1}			yields hl | ||||
|       gen | ||||
|          lhld {label,$1} | ||||
| 		yields hl | ||||
| 
 | ||||
| pat lil | ||||
| uses hlreg={const2,$1}, dereg | ||||
| gen dad lb | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov h,{m} | ||||
|     mov l,e | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov d,{m}				yields de | ||||
|    leaving | ||||
|       lol $1 | ||||
|       loi 2 | ||||
| 
 | ||||
| pat lof | ||||
| with hl_or_de | ||||
| kills hl_or_de | ||||
| uses hl_or_de={const2,$1} | ||||
| gen dad de | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov d,{m}				yields de | ||||
|    leaving | ||||
|       adp $1 | ||||
|       loi 2 | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat lal sfit($1, 8) | ||||
|       uses dereg, hlreg, areg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|       yields hl | ||||
| #endif | ||||
| 
 | ||||
| pat lal | ||||
|    uses hlreg={const2,$1} | ||||
| gen dad lb				yields hl | ||||
|       gen | ||||
|          dad lb | ||||
|       yields hl | ||||
| 
 | ||||
| pat lae					yields {label,$1} | ||||
| pat lae | ||||
|    yields {label,$1} | ||||
| 
 | ||||
| pat lxl $1==0				yields lb | ||||
| pat lxl $1==0 | ||||
|    yields lb | ||||
| 
 | ||||
| pat lxl $1==1 | ||||
| uses dereg, hlreg | ||||
| gen move {const2,SL},hl | ||||
|     dad lb | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov d,{m}				yields de | ||||
|    leaving | ||||
|       lxa 0 | ||||
|       loi 2 | ||||
| 
 | ||||
| pat lxl $1>1 && $1<256 | ||||
| uses dereg, areg={const1,$1}, hlreg | ||||
|  | @ -324,8 +326,10 @@ gen move lb,de | |||
| 
 | ||||
| pat lxa $1==0 | ||||
|    uses hlreg | ||||
| gen move {const2,SL},hl | ||||
|     dad lb				yields hl | ||||
|    gen | ||||
|       move {const2,SL},hl | ||||
|       dad lb | ||||
|    yields hl | ||||
| 
 | ||||
| pat lxa $1==1 | ||||
| uses dereg, hlreg | ||||
|  | @ -417,17 +421,9 @@ kills ALL | |||
| gen Call {label,".loi"} | ||||
| 
 | ||||
| pat ldl | ||||
| with STACK | ||||
| uses dereg, hlreg={const2,$1+3} | ||||
| gen dad lb | ||||
|     mov d,{m} | ||||
|     dcx hl | ||||
|     mov e,{m} | ||||
|     dcx hl | ||||
|     push de | ||||
|     mov d,{m} | ||||
|     dcx hl | ||||
|     mov e,{m}				yields de | ||||
|    leaving | ||||
|       lal $1 | ||||
|       loi 4 | ||||
| 
 | ||||
| pat lde | ||||
| with STACK | ||||
|  | @ -446,17 +442,9 @@ gen lhld {label,$1+2} | |||
|     lhld {label,$1}			yields de hl | ||||
| 
 | ||||
| pat ldf | ||||
| with hl_or_de STACK | ||||
| uses hl_or_de={const2,$1+3} | ||||
| gen dad de | ||||
|     mov d,{m} | ||||
|     dcx hl | ||||
|     mov e,{m} | ||||
|     dcx hl | ||||
|     push de | ||||
|     mov d,{m} | ||||
|     dcx hl | ||||
|     mov e,{m}				yields de | ||||
|    leaving | ||||
|       adp $1 | ||||
|       loi 4 | ||||
| 
 | ||||
| pat lpi | ||||
| uses hl_or_de={label,$1}		yields %a | ||||
|  | @ -494,81 +482,39 @@ with hlreg | |||
| gen shld {label,$1} | ||||
| 
 | ||||
| pat sil | ||||
|    with dereg | ||||
|    uses hlreg={const2,$1}, areg | ||||
|    gen | ||||
|       dad lb | ||||
|       mov a, {m} | ||||
|       inx hl | ||||
|       mov h, {m} | ||||
|       mov l, a | ||||
|       mov {m}, e | ||||
|       inx hl | ||||
|       mov {m}, d | ||||
|    leaving | ||||
|       lol $1 | ||||
|       sti 2 | ||||
| 
 | ||||
| pat sil lil $1==$2 | ||||
| with dereg | ||||
| uses hlreg={const2,$1}, areg | ||||
| gen dad lb | ||||
|     mov a,{m} | ||||
|     inx hl | ||||
|     mov h,{m} | ||||
|     mov l,a | ||||
|     mov {m},e | ||||
|     inx hl | ||||
|     mov {m},d				yields de | ||||
| 
 | ||||
| pat lil loc adi sil $1==$4 && $3==2 | ||||
| uses hlreg={const2,$1}, dereg, areg | ||||
| gen dad lb | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov h,{m} | ||||
|     mov l,e | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov d,{m} | ||||
|     push hl | ||||
|     lxi hl,{const2,$2} | ||||
|     dad de | ||||
|     xchg. | ||||
|     pop hl | ||||
|     mov {m},d | ||||
|     dcx hl | ||||
|     mov {m},e | ||||
|    leaving | ||||
|       dup 2 | ||||
|       lol $1 | ||||
|       sti 2 | ||||
| 
 | ||||
| pat lil inc sil $1==$3 | ||||
| uses hlreg={const2,$1}, areg | ||||
| gen dad lb | ||||
|     mov a,{m} | ||||
|     inx hl | ||||
|     mov h,{m} | ||||
|     mov l,a | ||||
|     inr {m} | ||||
|     jnz {label,1f} | ||||
|     inx hl | ||||
|     inr {m} | ||||
|     1: | ||||
|    leaving | ||||
|       lol $1 | ||||
|       dup 2 | ||||
|       loi 2 | ||||
|       inc 2 | ||||
|       exg 2 | ||||
|       sti 2 | ||||
| 
 | ||||
| pat lil dec sil $1==$3 | ||||
| uses hlreg={const2,$1}, dereg | ||||
| gen dad lb | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov h,{m} | ||||
|     mov l,e | ||||
|     mov e,{m} | ||||
|     inx hl | ||||
|     mov d,{m} | ||||
|     dcx de | ||||
|     mov {m},d | ||||
|     dcx hl | ||||
|     mov {m},e | ||||
| pat lil inc sil $1==$3 | ||||
|    leaving | ||||
|       lol $1 | ||||
|       dup 2 | ||||
|       loi 2 | ||||
|       dec 2 | ||||
|       exg 2 | ||||
|       sti 2 | ||||
| 
 | ||||
| pat stf | ||||
|    with hl_or_de STACK | ||||
|       uses hl_or_de={const2,$1} | ||||
| gen dad de | ||||
|       gen | ||||
|          dad de | ||||
|          pop de | ||||
|          mov {m},e | ||||
|          inx hl | ||||
|  | @ -585,13 +531,16 @@ with hlreg reg | |||
| 
 | ||||
| pat sti $1==2 | ||||
|    with label hlreg | ||||
|    gen shld %1 | ||||
|       gen | ||||
|          shld %1 | ||||
|    with hlreg dereg | ||||
|    gen mov {m},e | ||||
|       gen | ||||
|          mov {m},e | ||||
|          inx %1 | ||||
|          mov {m},d | ||||
|    with dereg hlreg | ||||
|    gen xchg. | ||||
|       gen | ||||
|          xchg. | ||||
|          mov {m},e | ||||
|          inx %2 | ||||
|          mov {m},d | ||||
|  | @ -640,51 +589,35 @@ kills ALL | |||
| gen Call {label,".sti"} | ||||
| 
 | ||||
| pat sdl | ||||
| with dereg | ||||
| kills ALL | ||||
| uses hlreg={const2,$1} | ||||
| gen dad lb | ||||
|     mov {m},e | ||||
|     inx hl | ||||
|     mov {m},d | ||||
|     inx hl | ||||
|     pop de | ||||
|     mov {m},e | ||||
|     inx hl | ||||
|     mov {m},d | ||||
|    leaving | ||||
|       lal $1 | ||||
|       sti 4 | ||||
| 
 | ||||
| pat sdf | ||||
|    leaving | ||||
|       adp $1 | ||||
|       sti 4 | ||||
| 
 | ||||
| pat sde | ||||
|    with hlreg | ||||
|       kills ALL | ||||
| gen shld {label,$1} | ||||
|       gen | ||||
|          shld {label,$1} | ||||
|          pop hl | ||||
|          shld {label,$1+2} | ||||
|    with hlreg dereg | ||||
|       kills ALL | ||||
| gen shld {label,$1} | ||||
|       gen | ||||
|          shld {label,$1} | ||||
|          xchg. | ||||
|          shld {label,$1+2} | ||||
|    with dereg hlreg | ||||
|       kills ALL | ||||
| gen shld {label,$1+2} | ||||
|       gen | ||||
|          shld {label,$1+2} | ||||
|          xchg. | ||||
|          shld {label,$1} | ||||
| 
 | ||||
| pat sdf | ||||
| with hl_or_de | ||||
| kills ALL | ||||
| uses hl_or_de={const2,$1} | ||||
| gen dad de | ||||
|     pop de | ||||
|     mov {m},e | ||||
|     inx hl | ||||
|     mov {m},d | ||||
|     inx hl | ||||
|     pop de | ||||
|     mov {m},e | ||||
|     inx hl | ||||
|     mov {m},d | ||||
| 
 | ||||
| /****************************************/ | ||||
| /* Group 3: Integer arithmetic          */ | ||||
| /****************************************/ | ||||
|  | @ -912,11 +845,27 @@ pat sbs $1==2					leaving sbi 2 | |||
| 
 | ||||
| pat inc | ||||
|    with hl_or_de | ||||
| gen inx %1				yields %1 | ||||
|       gen | ||||
|          inx %1 | ||||
|       yields %1 | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat inl sfit($1, 8) | ||||
|       uses hlreg, areg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|          inr {m} | ||||
|          jnz {label, 1f} | ||||
|          inx hl | ||||
|          inr {m} | ||||
|          1: | ||||
| #endif | ||||
| 
 | ||||
| pat inl | ||||
|    uses hlreg={const2,$1} | ||||
| gen dad lb | ||||
|       gen | ||||
|          dad lb | ||||
|          inr {m} | ||||
|          jnz {label,1f} | ||||
|          inx hl | ||||
|  | @ -935,6 +884,21 @@ pat dec | |||
| with hl_or_de | ||||
| gen dcx %1				yields %1 | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat del sfit($1, 8) | ||||
|       uses hlreg, areg, dereg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|          mov e, {m} | ||||
|          inx hl | ||||
|          mov d, {m} | ||||
|          dcx de | ||||
|          mov {m}, d | ||||
|          dcx hl | ||||
|          mov {m}, e | ||||
| #endif | ||||
| 
 | ||||
| pat del | ||||
|    uses hlreg={const2,$1}, dereg | ||||
|    gen dad lb | ||||
|  | @ -952,9 +916,22 @@ gen lhld {label,$1} | |||
|     dcx hl | ||||
|     shld {label,$1} | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat zrl sfit($1, 8) | ||||
|       uses hlreg, areg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|          xra a | ||||
|          mov {m}, a | ||||
|          inx hl | ||||
|          mov {m}, a | ||||
| #endif | ||||
| 
 | ||||
| pat zrl | ||||
|    uses hlreg={const2,$1}, areg | ||||
| gen dad lb | ||||
|       gen | ||||
|          dad lb | ||||
|          xra a | ||||
|          mov {m},a | ||||
|          inx hl | ||||
|  | @ -1201,13 +1178,15 @@ pat and $1==2 | |||
| 
 | ||||
| pat and defined($1) | ||||
|    kills ALL | ||||
| gen lxi de,{const2,$1} | ||||
|    gen | ||||
|       lxi de,{const2,$1} | ||||
|       Call {label,".and"} | ||||
| 
 | ||||
| pat and !defined($1) | ||||
|    with dereg | ||||
|       kills ALL | ||||
| gen Call {label,".and"} | ||||
|       gen | ||||
|          Call {label,".and"} | ||||
| 
 | ||||
| pat ior $1==2 | ||||
|    with hl_or_de smallconst2 | ||||
|  | @ -1930,19 +1909,45 @@ gen xra a | |||
|     jnz {label,$1} | ||||
|     1: | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat lol zeq sfit($1, 8) | ||||
|       uses hlreg, areg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|          mov a, {m} | ||||
|          inx hl | ||||
|          ora {m} | ||||
|          jz {label, $2} | ||||
| #endif | ||||
| 
 | ||||
| pat lol zeq | ||||
|    with STACK | ||||
|       uses hlreg={const2,$1}, areg | ||||
| gen dad lb | ||||
|       gen | ||||
|          dad lb | ||||
|          mov a,{m} | ||||
|          inx hl | ||||
|          ora {m} | ||||
|          jz {label,$2} | ||||
| 
 | ||||
| #ifdef USE_I80_RSTS | ||||
|    pat lol zne sfit($1, 8) | ||||
|       uses hlreg, areg | ||||
|       gen | ||||
|          rst {const1, 3} | ||||
|          data1 {const1, $1} | ||||
|          mov a, {m} | ||||
|          inx hl | ||||
|          ora {m} | ||||
|          jnz {label, $2} | ||||
| #endif | ||||
| 
 | ||||
| pat lol zne | ||||
|    with STACK | ||||
|    uses hlreg={const2,$1}, areg | ||||
| gen dad lb | ||||
|    gen | ||||
|       dad lb | ||||
|       mov a,{m} | ||||
|       inx hl | ||||
|       ora {m} | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue