From: David Given Date: Fri, 15 Feb 2019 23:25:33 +0000 (+0100) Subject: Merge from default. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=41f9ed4fa71bf258d2290181fe93c789f857720a;p=ack.git Merge from default. --- 41f9ed4fa71bf258d2290181fe93c789f857720a diff --cc mach/i80/libem/rst.s index bedb9b574,c018f3f0a..a4bddd1a3 --- a/mach/i80/libem/rst.s +++ b/mach/i80/libem/rst.s @@@ -5,77 -5,38 +5,38 @@@ .sect .bss .sect .text + ! Which resets we install are determined by statistical analysis of Star + ! Trek. When changing these, make sure to update the i80 table to match. + ! 97 call .floadn2 + ! 41 call .floadn4 + ! 34 call .fload4 + ! 28 call .fstoren2 + ! + ! Also: + ! 48 call .cmps_mag + .define .rst_init .rst_init: - mvi a, 0xc3 ! jmp - sta 0x08 - sta 0x10 - sta 0x18 - lxi h, rst1 - shld 0x09 - lxi h, rst2 - shld 0x11 - lxi h, rst3 - shld 0x19 - ret - - ! de = [fp+const1] - rst1: - lhld .fp - xchg - - pop h - mov a, m - inx h - push h - - mov l, a - ral - sbb a - mov h, a - - dad d - mov e, m - inx h - mov d, m - ret - - ! [fp+const1] = bc - rst2: - lhld .fp - xchg - - pop h + lxi h, .floadn2 + lxi d, 0x0008 + call copy + lxi h, .floadn4 + call copy + lxi h, .fload4 + call copy + lxi h, .fstoren2 + call copy + lxi h, .cmps_mag + jmp copy + + ! Copies eight bytes from HL to DE. + copy: + mvi c, 8 + .1: mov a, m + stax d inx h - push h - - mov l, a - ral - sbb a - mov h, a - - dad d - mov m, c - inx h - mov m, b + inr e + dcr c + jnz .1 - ret + ret - - ! hl = fp+const1 - rst3: - lhld .fp - xchg - - pop h - mov a, m - inx h - push h - - mov l, a - ral - sbb a - mov h, a - - dad d - ret - diff --cc mach/i80/ncg/table index de84618ca,b9a2b49dc..2ffd3e862 --- a/mach/i80/ncg/table +++ b/mach/i80/ncg/table @@@ -20,11 -24,10 +24,12 @@@ lbreg /* the registers used as localb reg /* the free registers */ regpair /* register pairs bc, de and hl */ regind /* register indirect */ +bcreg /* bc-register-pair */ dereg /* de-register-pair */ hlreg /* hl-register-pair */ +bc_or_de /* bc- or de-register-pair */ hl_or_de /* de- or hl-register-pair */ + localbase stackpointer psword @@@ -188,84 -200,104 +197,100 @@@ TEST STACKINGRULES - from regpair to STACK - gen push %1 + from regpair to STACK + gen + push %1 - from immediate + reg to STACK - uses hl_or_de - gen - move %1, %a - push %a +from immediate + reg to STACK + uses regpair + gen + move %1,%a + push %a - from immediate + reg to STACK - gen - push hl - move %1,hl - xthl. - + from immediate + reg to STACK + gen + push hl + move %1, hl + xthl. COERCIONS - from STACK - uses regpair - gen - pop %a - yields %a + from STACK + uses regpair + gen + pop %a + yields %a - from STACK - uses hl_or_de - gen - pop %a - yields %a.2 +from STACK + uses regpair + gen + pop %a + yields %a.2 - from STACK - uses areg - gen - dcx sp - pop psw - inx sp - yields %a +from STACK +uses areg +gen dcx sp + pop psw + inx sp yields a - from immediate - uses regpair - gen - move %1,%a - yields %a + from immediate + uses regpair=%1 + yields %a - from hl_or_de - uses hl_or_de +from hl_or_de + uses hl_or_de gen xchg. yields %a - from regpair - uses regpair - gen - move %1,%a - yields %a + from regpair + uses regpair=%1 + yields %a - from reg - uses reusing %1, regpair - gen - move %1,%a.2 - move {const1,0},%a.1 - yields %a + from reg - uses reusing %1, hl_or_de ++ uses reusing %1, regpair + gen + move %1,%a.2 + move {const1,0},%a.1 + yields %a - from hl_or_de yields %1.2 +from regpair + yields %1.2 - from smallpconst2 - yields {const2, %1.num} - - from smallnconst2 - yields {const2, %1.num} +from smallconst2 + yields {const2, %1.num} - from const2 - uses regpair + from const2 - uses hl_or_de=%1 ++ uses regpair=%1 + yields %a + + from smallpconst2 + uses reg={const1, %1.num & 0xff} + yields %a + + from smallnconst2 + uses reg={const1, %1.num & 0xff} + yields %a + + from smallpconst2 %1.num == 1 + uses reg={const1, 0} gen - move %1, %a - yields %a.2 + inr %a + yields %a - from regpair - uses areg - gen - move %1.2,a - yields a + from smallnconst2 %1.num == 0-1 + uses reg={const1, 0} + gen + dcr %a + yields %a + + from const2 + uses reg={const1, %1.num & 0xff} + yields %a + + from hl_or_de + uses reg=%1.2 + yields %a PATTERNS @@@ -316,19 -374,22 +367,22 @@@ pat lo 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 ($1>0) && ($1<=STACKHELPERS) + uses hlreg + gen + Call {plabel, ".faddr", $1} + yields hl + + pat lal ($1<0) && ($1>=0-STACKHELPERS) + uses hlreg + gen + Call {plabel, ".faddrn", 0-$1} + yields hl pat lal - uses hlreg={const2,$1} + uses hlreg={fp}, regpair={const2,$1} gen - dad lb + dad %b yields hl pat lae @@@ -364,102 -423,82 +418,102 @@@ pat lxa $1== yields hl pat lxa $1==1 -uses dereg, hlreg -gen move {const2,SL},hl - dad lb - mov e,{m} - inx hl - mov d,{m} - lxi hl,{const2,SL} - dad de yields hl + uses dereg={const2, SL}, hlreg={fp} + gen + dad de + mov e,{m} + inx hl + mov d,{m} + lxi hl,{const2,SL} + dad de + yields hl pat lxa $1>1 && $1<256 -uses dereg, hlreg, areg={const1,$1} -gen move lb,de - 1: - lxi hl,{const2,SL} - dad de - mov e,{m} - inx hl - mov d,{m} - dcr a - jnz {label,1b} - lxi hl,{const2,SL} - dad de yields hl + uses dereg, hlreg={fp}, areg={const1,$1} + gen + xchg. + 1: + lxi hl,{const2,SL} + dad de + mov e,{m} + inx hl + mov d,{m} + dcr a + jnz {label,1b} + lxi hl,{const2,SL} + dad de + yields hl pat loi $1==1 -with exact label - uses areg - gen lda %1 yields a -with dereg - uses areg - gen ldax de yields a -with hlreg - uses reusing %1, reg - gen mov %a,{m} yields %a + with exact label + uses areg + gen + lda %1 - yields a ++ yields a + with bc_or_de + uses areg + gen + ldax %1 + yields a + with hlreg + uses reusing %1, reg + gen + mov %a,{m} + yields %a pat loi $1==2 -with exact label - gen lhld %1 yields hl -with hlreg - uses dereg - gen mov e,{m} - inx %1 - mov d,{m} yields de + with exact label + gen + lhld %1 + yields hl + with hlreg + uses regpair + gen + mov %a.2, {m} + inx %1 + mov %a.1, {m} + yields %a pat loi $1==4 -with exact label - gen lhld %1 - xchg. - lhld {label,%1.off+2} yields hl de -with exact label - gen lhld {label,%1.off+2} - xchg. - lhld %1 yields de hl -with hlreg - uses dereg, areg - gen mov e,{m} - inx %1 - mov d,{m} - inx hl - mov a,{m} - inx hl - mov h,{m} - mov l,a yields hl de + with exact label + gen + lhld %1 + xchg. + lhld {label,%1.off+2} + yields hl de + with exact label + gen + lhld {label,%1.off+2} + xchg. + lhld %1 + yields de hl + with hlreg + uses regpair, areg + gen + mov %a.2, {m} + inx %1 + mov %a.1,{m} + inx hl + mov a,{m} + inx hl + mov h,{m} + mov l,a + yields hl %a pat loi $1<=510 -with hl_or_de STACK -uses hl_or_de={const2,$1-1}, areg -gen dad de - mvi a,{const1,$1/2} - 1: - mov d,{m} - dcx hl - mov e,{m} - dcx hl - push de - dcr a - jnz {label,1b} + with hl_or_de STACK + uses hl_or_de={const2,$1-1}, areg + gen + dad de + mvi a,{const1,$1/2} + 1: + mov d,{m} + dcx hl + mov e,{m} + dcx hl + push de + dcr a + jnz {label,1b} pat loi $1>=512 kills ALL @@@ -507,39 -545,43 +561,50 @@@ pat lp /******************************************/ pat stl lol $1==$2 -with dereg yields de de leaving stl $1 + with regpair + yields %1 %1 + leaving + stl $1 #ifdef USE_I80_RSTS - pat stl sfit($1, 8) - with bcreg - uses hlreg, dereg, areg - gen - rst {const1, 2} - data1 {const1, $1} + pat stl $1==0-2 + with dereg + uses hlreg + gen + rst {const1, 4} #endif + pat stl ($1>0) && ($1<=STACKHELPERS) + with dereg + uses hlreg + gen + Call {plabel, ".fstore", $1} + + pat stl ($1<0) && ($1>=0-STACKHELPERS) + with dereg + uses hlreg + gen + Call {plabel, ".fstoren", 0-$1} + pat stl - with dereg - uses hlreg={const2, $1} - gen - dad lb - mov {m}, e - inx hl - mov {m}, d + with regpair + uses hlreg={fp}, regpair={const2, $1} + gen + dad %b + mov {m}, %1.2 + inx hl + mov {m}, %1.1 pat ste loe $1==$2 -with hlreg yields hl hl leaving ste $1 + with regpair + yields %1 %1 + leaving + ste $1 pat ste -with hlreg -gen shld {label,$1} + with hlreg + gen + shld {label,$1} pat sil leaving @@@ -982,12 -1029,11 +1057,11 @@@ pat inl ($1<0) && ($1>=0-STACKHELPERS inx hl inr {m} 1: - #endif pat inl - uses hlreg={const2,$1} + uses hlreg={fp}, regpair={const2, $1} gen - dad lb + dad %b inr {m} jnz {label,1f} inx hl @@@ -1003,37 -1049,20 +1077,22 @@@ gen inr {m 1: pat dec -with hl_or_de -gen dcx %1 yields %1 + with regpair + gen + dcx %1 + yields %1 - #ifdef USE_I80_RSTS - pat del sfit($1, 8) - uses hlreg, areg, dereg + pat del - uses hlreg={const2,$1} ++ uses hlreg={fp}, regpair={const2,$1} gen - rst {const1, 3} - data1 {const1, $1} - dad lb -- mov e, {m} ++ dad %b ++ mov %b.2, {m} inx hl -- mov d, {m} ++ mov %b.1, {m} dcx de -- mov {m}, d ++ mov {m}, %b.1 dcx hl mov {m}, e - #endif - - pat del - uses hlreg={fp}, regpair={const2,$1} - gen - dad %b - mov %b.2, {m} - inx hl - mov %b.1, {m} - dcx %b - mov {m}, %b.1 - dcx hl - mov {m}, %b.2 pat dee uses hlreg @@@ -1041,22 -1070,10 +1100,10 @@@ gen lhld {label,$1 dcx hl shld {label,$1} - #ifdef USE_I80_RSTS - pat zrl sfit($1, 8) - uses hlreg, dereg, 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 + uses hlreg={fp}, regpair={const2,$1}, areg gen - dad lb + dad %b xra a mov {m},a inx hl @@@ -1252,15 -1261,28 +1299,28 @@@ leaving loc $1 loc $2 cal ".cfu" asp 4+ /*****************************************/ pat and $1==2 - with regpair smallconst2 - with hl_or_de smallpconst2 ++ with regpair smallpconst2 + uses areg + gen + mov a, %1.2 + ani {const1, %2.num & 0xff} + yields a - with smallpconst2 hl_or_de ++ with smallpconst2 regpair + yields %1 %2 + leaving + and 2 - with hl_or_de smallnconst2 ++ with regpair smallnconst2 uses areg gen mov a, %1.2 ani {const1, %2.num & 0xff} mov %1.2, a - mvi %1.1, {const1, 0} yields %1 - with smallnconst2 hl_or_de ++ with smallnconst2 regpair + yields %1 %2 + leaving + and 2 - with hl_or_de const2 + with regpair const2 uses areg gen mov a, %1.2 @@@ -1270,25 -1292,11 +1330,11 @@@ ani {const1, %2.num >> 8} mov %1.1, a yields %1 - with const2 hl_or_de + with const2 regpair - uses areg - gen - mov a, %2.2 - ani {const1, %1.num & 0xff} - mov %2.2, a - mov a, %2.1 - ani {const1, %1.num >> 8} - mov %2.1, a - yields %2 - with smallconst2 regpair - uses areg - gen - mov a, %2.2 - ani {const1, %1.num & 0xff} - mov %2.2, a - mvi %2.1, {const1, 0} - yields %2 + yields %1 %2 + leaving + and 2 - with hl_or_de hl_or_de + with regpair regpair uses areg gen mov a, %1.2 @@@ -1329,7 -1337,23 +1375,23 @@@ pat ior $1== ori {const1, %2.num & 0xff} mov %1.2, a yields %1 - with smallpconst2 hl_or_de ++ with smallpconst2 regpair + yields %1 %2 + leaving + ior 2 - with hl_or_de smallnconst2 ++ with regpair smallnconst2 + uses areg + gen + mov a, %1.2 + ori {const1, %2.num & 0xff} + mov %1.2, a + move {const1, 0xff}, %1.1 + yields %1 - with smallnconst2 hl_or_de ++ with smallnconst2 regpair + yields %1 %2 + leaving + ior 2 - with hl_or_de const2 + with regpair const2 uses areg gen mov a, %1.2 @@@ -1339,24 -1363,11 +1401,11 @@@ ori {const1, %2.num >> 8} mov %1.1, a yields %1 - with const2 hl_or_de + with const2 regpair - uses areg - gen - mov a, %2.2 - ori {const1, %1.num & 0xff} - mov %2.2, a - mov a, %2.1 - ori {const1, %1.num >> 8} - mov %2.1, a - yields %2 - with smallconst2 regpair - uses areg - gen - mov a, %2.2 - ori {const1, %1.num & 0xff} - mov %2.2, a - yields %2 + yields %1 %2 + leaving + ior 2 - with hl_or_de hl_or_de + with regpair regpair uses areg gen mov a, %1.2 @@@ -1395,7 -1406,11 +1444,11 @@@ pat xor $1== xri {const1, %2.num & 0xff} mov %1.2, a yields %1 - with smallpconst2 hl_or_de ++ with smallpconst2 regpair + yields %1 %2 + leaving + xor 2 - with hl_or_de const2 + with regpair const2 uses areg gen mov a, %1.2 @@@ -1405,24 -1420,11 +1458,11 @@@ xri {const1, %2.num >> 8} mov %1.1, a yields %1 - with const2 hl_or_de + with const2 regpair - uses areg - gen - mov a, %2.2 - xri {const1, %1.num & 0xff} - mov %2.2, a - mov a, %2.1 - xri {const1, %1.num >> 8} - mov %2.1, a - yields %2 - with smallconst2 regpair - uses areg - gen - mov a, %2.2 - xri {const1, %1.num & 0xff} - mov %2.2, a - yields %2 + yields %1 %2 + leaving + xor 2 - with hl_or_de hl_or_de + with regpair regpair uses areg gen mov a, %1.2 @@@ -1687,28 -1674,90 +1727,90 @@@ leaving cal ".cmf4" asp 8 lfr pat cmf $1==8 leaving cal ".cmf8" asp 16 lfr 2 - pat cmu $1==2 - with regpair regpair + pat cmu zlt $1==2 - with hl_or_de hl_or_de STACK ++ with regpair regpair STACK uses areg gen - mov a,%2.1 - cmp %1.1 - jz {label,2f} - jc {label,1f} - 0: - lxi %2,{const2,1} - jmp {label,3f} - 1: - lxi %2,{const2,0-1} - jmp {label,3f} - 2: - mov a,%2.2 - cmp %1.2 - jc {label,1b} - jnz {label,0b} - lxi %2,{const2,0} - 3: - yields %2 + mov a, %2.2 + sub %1.2 + mov a, %2.1 + sbb %1.1 + jc {label, $2} - with const2 hl_or_de STACK ++ with const2 regpair STACK + uses areg + gen + mov a, %2.2 + sbi {const1, %1.num & 0xff} + mov a, %2.1 + sbi {const1, %1.num >> 8} + jc {label, $2} - with hl_or_de const2 STACK ++ with regpair const2 STACK + uses areg + gen + mvi a, {const1, %2.num & 0xff} + sub %1.2 + mvi a, {const1, %2.num >> 8} + sbb %1.1 + jc {label, $2} + + pat cmu zgt $1==2 + leaving + exg 2 + cmu 2 + zlt $2 + + pat cmu zge $1==2 - with hl_or_de hl_or_de STACK ++ with regpair regpair STACK + uses areg + gen + mov a, %2.2 + sub %1.2 + mov a, %2.1 + sbb %1.1 + jnc {label, $2} - with const2 hl_or_de STACK ++ with const2 regpair STACK + uses areg + gen + mov a, %2.2 + sbi {const1, %1.num & 0xff} + mov a, %2.1 + sbi {const1, %1.num >> 8} + jnc {label, $2} - with hl_or_de const2 STACK ++ with regpair const2 STACK + uses areg + gen + mvi a, {const1, %2.num & 0xff} + sub %1.2 + mvi a, {const1, %2.num >> 8} + sbb %1.1 + jnc {label, $2} + + pat cmu zle $1==2 + leaving + exg 2 + cmu 2 + zge $2 + + pat cmu $1==2 -with hl_or_de hl_or_de ++with regpair regpair + uses areg + gen mov a,%2.1 + cmp %1.1 + jz {label,2f} + jc {label,1f} + 0: + lxi %2,{const2,1} + jmp {label,3f} + 1: + lxi %2,{const2,0-1} + jmp {label,3f} + 2: + mov a,%2.2 + cmp %1.2 + jc {label,1b} + jnz {label,0b} + lxi %2,{const2,0} + 3: yields %2 pat cmu $1==4 kills ALL @@@ -2102,75 -2077,68 +2150,68 @@@ pat bn jnz {label,$1} pat zlt - with STACK - gen pop psw - ora a - jm {label,$1} - with regpair STACK - gen mov a,%1.1 - ora a - jm {label,$1} + with STACK + gen + pop psw + ora a + jm {label,$1} - with hl_or_de STACK ++ with regpair STACK + gen + mov a,%1.1 + ora a + jm {label,$1} pat zle - with regpair STACK - uses areg - gen xra a - add %1.1 - jm {label,$1} - jnz {label,1f} - xra a - add %1.2 - jz {label,$1} - 1: - with hl_or_de STACK ++ with regpair STACK + uses areg + gen + mov a, %1.1 + ora a + jm {label, $1} + jnz {label, 1f} + ora %1.2 + jz {label, $1} + 1: pat zeq - with regpair STACK - uses areg - gen mov a,%1.1 - ora %1.2 - jz {label,$1} - with hl_or_de STACK ++ with regpair STACK + uses areg + gen + mov a,%1.1 + ora %1.2 + jz {label,$1} pat zne - with regpair STACK - uses areg - gen mov a,%1.1 - ora %1.2 - jnz {label,$1} - with hl_or_de STACK ++ with regpair STACK + uses areg + gen + mov a,%1.1 + ora %1.2 + jnz {label,$1} pat zge - with STACK - gen pop psw - ral. - jnc {label,$1} - with regpair STACK - gen mov a,%1.1 - ora a - jp {label,$1} + with STACK + gen + pop psw + ral. + jnc {label,$1} - with hl_or_de STACK ++ with regpair STACK + gen + mov a,%1.1 + ora a + jp {label,$1} pat zgt - with regpair STACK - uses areg - gen xra a - add %1.1 - jm {label,1f} - jnz {label,$1} - xra a - add %1.2 - jnz {label,$1} - 1: - - #ifdef USE_I80_RSTS - pat lol zeq sfit($1, 8) - with STACK - uses hlreg, dereg, areg - gen - rst {const1, 3} - data1 {const1, $1} - mov a, {m} - inx hl - ora {m} - jz {label, $2} - #endif - with hl_or_de STACK ++ with regpair STACK + uses areg + gen + mov a, %1.1 + ora a + jm {label, 1f} + jnz {label, $1} + ora %1.2 + jnz {label, $1} + 1: pat lol zeq with STACK @@@ -2182,31 -2150,18 +2223,18 @@@ ora {m} jz {label,$2} - #ifdef USE_I80_RSTS - pat lol zne sfit($1, 8) - with STACK - uses hlreg, dereg, 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 - mov a,{m} - inx hl - ora {m} - jnz {label,$2} + uses hlreg={fp}, regpair={const2,$1}, areg + gen + dad %b + mov a,{m} + inx hl + ora {m} + jnz {label,$2} pat ior zeq $1==2 - with hl_or_de hl_or_de STACK + with regpair regpair STACK uses areg gen mov a,%1.1 @@@ -2284,12 -2236,22 +2312,22 @@@ pat ret $1<= /* Group 15: Miscellaneous */ /******************************************/ - pat asp ($1<=0-12) || ($1>=12) + pat asp $1==0 /* do nothing */ + + pat asp ($1==2) - with hl_or_de ++ with regpair with STACK - uses hlreg={const2,$1} - uses hlreg ++ uses regpair gen - dad sp - sphl. - pop hl ++ pop %a + + pat asp ($1==4) - with hl_or_de hl_or_de ++ with regpair regpair + with STACK - uses hlreg ++ uses regpair + gen - pop hl - pop hl ++ pop %a ++ pop %a pat asp ($1<0) && ($1>0-12) with STACK @@@ -2298,13 -2260,11 +2336,11 @@@ leaving asp $1+2 - pat asp $1==0 /* do nothing */ - - pat asp ($1>0) && ($1<12) + pat asp ($1>4) && ($1<12) with STACK - uses hlreg + uses regpair gen - pop hl + pop %a leaving asp $1-2