PROPERTIES
areg /* the a-register */
-lbreg /* the registers used as localbase */
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
REGISTERS
-a :areg,reg.
-b,c :lbreg.
-d,e,h,l :reg.
-bc("b")=b+c :regpair, regind, bcreg.
-de("d")=d+e :regpair, regind, dereg, hl_or_de.
-hl("h")=h+l :regpair, hlreg, hl_or_de.
-sp :stackpointer.
-psw=a :psword. /* in fact psw also includes
- condition codes */
+a: areg,reg.
+b,c,d,e,h,l: reg.
+bc("b")=b+c: regpair, regind, bcreg.
+de("d")=d+e: regpair, regind, dereg, hl_or_de.
+hl("h")=h+l: regpair, hlreg, hl_or_de.
+sp: stackpointer.
+psw=a: psword. /* in fact psw also includes condition codes */
TOKENS
SETS
-reg1 = reg + lbreg + m.
+reg1 = reg + m.
b_d_h_sp = regpair + stackpointer.
-b_d_h_psw = regpair + psword.
-immediate = smallconst2 + const2 + label.
+b_d_h_psw = regpair + psword.
+immediate = smallconst2 + const2 + label.
src1 = reg.
-src2 = hl_or_de + const2 + label.
-src1or2 = src1 + src2.
+src2 = regpair + const2 + label.
+src1or2 = src1 + src2.
INSTRUCTIONS
data1 ".data1" const1:ro.
data2 ".data2" const2:ro.
dad b_d_h_sp:ro kills hl:cc cost(1,10).
- dcr reg+lbreg:rw:cc cost(1, 5).
+ dcr reg:rw:cc cost(1, 5).
dcr m:rw:cc cost(1, 7).
dcx b_d_h_sp:rw cost(1, 5).
/* di cost(1, 4). */
/* ei cost(1, 4). */
/* hlt cost(1, 4). */
/* in const1:ro cost(2,10). */
- inr reg+lbreg:rw:cc cost(1, 5).
+ inr reg:rw:cc cost(1, 5).
inr m:rw:cc cost(1, 7).
inx b_d_h_sp:rw cost(1, 5).
jc label:ro cost(3,10).
ldax regind:ro kills a cost(1, 7).
lhld label:ro kills hl cost(3,16).
lxi b_d_h_sp:wo,immediate:ro cost(3,10).
- mov reg+lbreg:wo,reg+lbreg:ro cost(1, 5).
+ mov reg:wo,reg:ro cost(1, 5).
mov m:wo,reg1:ro cost(1, 4).
mov reg1:wo,m:ro cost(1, 4).
mvi reg1:wo,const1:ro cost(2, 7).
MOVES
from reg to reg
-gen mov %2,%1
+ gen
+ mov %2, %1
from const1 %num==0 to areg
-gen xra a
+ gen
+ xra a
from const1 to reg
-gen mvi %2,%1
+ gen
+ mvi %2,%1
from immediate to b_d_h_sp
-gen lxi %2,%1
+ gen
+ lxi %2,%1
from reg to regpair
-gen mov %2.2,%1
- mvi %2.1,{const1,0}
+ gen
+ mov %2.2,%1
+ mvi %2.1,{const1,0}
from regpair to regpair
-gen mov %2.1,%1.1
- mov %2.2,%1.2
+ gen
+ mov %2.1, %1.1
+ mov %2.2, %1.2
from fp to hlreg
gen
lhld {label, ".fp"}
+
TESTS
to test areg /* dummy test, never used */
gen ora a
+
STACKINGRULES
from regpair to STACK
-gen push %1
+ gen push %1
from immediate + reg to STACK
-uses hl_or_de
-gen move %1,%a
- push %a
+ uses regpair
+ gen
+ move %1,%a
+ push %a
from immediate + reg to STACK
-gen push hl
- move %1,hl
- xthl.
+ gen
+ push hl
+ move %1,hl
+ xthl.
+
COERCIONS
from STACK
-uses regpair
-gen pop %a yields %a
+ uses regpair
+ gen
+ pop %a
+ yields %a
from STACK
-uses hl_or_de
-gen pop %a yields %a.2
+ uses regpair
+ gen
+ pop %a
+ yields %a.2
from STACK
uses areg
inx sp yields a
from immediate
-uses regpair
-gen move %1,%a yields %a
+ uses regpair
+ gen
+ move %1,%a
+ yields %a
from hl_or_de
-uses hl_or_de
-gen xchg. yields %a
+ uses hl_or_de
+ gen
+ xchg.
+ yields %a
from regpair
-uses regpair
-gen move %1,%a yields %a
+ uses regpair
+ gen
+ move %1,%a
+ yields %a
from reg
-uses reusing %1, hl_or_de
-gen move %1,%a.2
- move {const1,0},%a.1 yields %a
+ 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 smallconst2
yields {const2, %1.num}
from const2
-uses hl_or_de
-gen move %1,%a yields %a.2
+ uses regpair
+ gen
+ move %1, %a
+ yields %a.2
-from hl_or_de
-uses areg
-gen move %1.2,a yields a
+from regpair
+ uses areg
+ gen
+ move %1.2,a
+ yields a
PATTERNS
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
+ 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
loi 4
pat lpi
-uses hl_or_de={label,$1} yields %a
+ uses regpair={label,$1}
+ yields %a
/******************************************/
/* Group 2: Store instructions */
/******************************************/
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)
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
with label hlreg
gen
shld %1
- with hlreg dereg
+ with hlreg regpair
gen
- mov {m},e
+ mov {m}, %2.2
inx %1
- mov {m},d
+ mov {m}, %2.1
with dereg hlreg
gen
xchg.
- mov {m},e
+ mov {m}, e
inx %2
- mov {m},d
+ mov {m}, d
pat sti $1==4
-with label hlreg dereg
- gen shld %1
- xchg.
- shld {label,%1.off+2}
-with label dereg hlreg
- gen shld {label,%1.off+2}
- xchg.
- shld %1
-with hlreg dereg
-kills ALL
- gen mov {m},e
- inx hl
- mov {m},d
- inx hl
- pop de
- mov {m},e
- inx hl
- mov {m},d
+ with label hlreg dereg
+ gen
+ shld %1
+ xchg.
+ shld {label,%1.off+2}
+ with label dereg hlreg
+ gen
+ shld {label,%1.off+2}
+ xchg.
+ shld %1
+ with hlreg regpair regpair
+ kills ALL
+ gen
+ mov {m}, %2.2
+ inx hl
+ mov {m}, %2.1
+ inx hl
+ mov {m}, %3.2
+ inx hl
+ mov {m}, %3.1
pat sti $1<512
-with hlreg
-kills ALL
-uses areg={const1,$1/2}, dereg
-gen 1:
- pop de
- mov {m},e
- inx hl
- mov {m},d
- inx hl
- dcr a
- jnz {label,1b}
+ with hlreg
+ kills ALL
+ uses areg={const1,$1/2}, regpair
+ gen
+ 1:
+ pop %b
+ mov {m}, %b.2
+ inx hl
+ mov {m}, %b.1
+ inx hl
+ dcr a
+ jnz {label,1b}
pat sti
kills ALL
/****************************************/
pat adi $1==2
- with hlreg dereg
+ with hlreg regpair
gen
- dad de
+ dad %2
yields hl
- with dereg hlreg
+ with regpair hlreg
gen
- dad de
- yields hl
- with hlreg hlreg
- gen
- dad hl
+ dad %1
yields hl
with dereg dereg
gen
Call {label,".adi4"}
pat sbi $1==2
- with const2 hl_or_de
+ with const2 regpair
yields %2 {const2, 0-%1.num}
leaving
adi 2
- with smallconst2 hl_or_de
+ with smallconst2 regpair
yields %2 {smallconst2, 0-%1.num}
leaving
adi 2
- with hl_or_de const2
+ with regpair const2
uses areg
gen
mvi a, {const1, %2.num & 0xff}
sbb %1.1
mov %1.1, a
yields %1
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a,%2.2
sbb %1.1
mov %1.1,a
yields %1
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a,%2.2
Call {label,".dvi4"}
pat ngi $1==2
-with hl_or_de
-uses areg
-gen xra a
- sub %1.2
- mov %1.2,a
- mvi a,{const1,0}
- sbb %1.1
- mov %1.1,a yields %1
+ with regpair
+ uses areg
+ gen
+ xra a
+ sub %1.2
+ mov %1.2,a
+ mvi a,{const1,0}
+ sbb %1.1
+ mov %1.1,a yields %1
pat ngi $1==4
kills ALL
sli 2
pat loc sli ($1==8) && ($2==2)
- with hl_or_de
+ with regpair
gen
mov %1.1, %1.2
mvi %1.2, {const1, 0}
pat adp $1==0 /* do nothing */
-pat adp $1==1
-with hl_or_de
-gen inx %1 yields %1
-
-pat adp $1==2
-with hl_or_de
-gen inx %1
- inx %1 yields %1
-
-pat adp $1==0-1
-with hl_or_de
-gen dcx %1 yields %1
+pat adp ($1>0) && ($1<5)
+ with regpair
+ gen
+ inx %1
+ yields %1
+ leaving
+ adp $1-1
-pat adp $1==0-2
-with hl_or_de
-gen dcx %1
- dcx %1 yields %1
+pat adp ($1<0) && ($1>(0-5))
+ with regpair
+ gen
+ dcx %1
+ yields %1
+ leaving
+ adp $1+1
pat adp
-with hl_or_de
-uses hl_or_de={const2,$1}
-gen dad de yields hl
+ with hl_or_de
+ uses hl_or_de={const2, $1}
+ gen
+ dad de
+ yields hl
+ with hlreg
+ uses regpair={const2, $1}
+ gen
+ dad %a
+ yields hl
pat ads $1==2 leaving adi 2
/********************************************/
pat inc
- with hl_or_de
+ with regpair
gen
inx %1
yields %1
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)
pat zer $1==4 yields {const2,0} {const2,0}
pat zer $1<511
-kills ALL
-uses reg={const1,$1/2}, hl_or_de={const2,0}
-gen 1:
- push %b
- dcr %a
- jnz {label,1b}
+ kills ALL
+ uses reg={const1,$1/2}, regpair={const2,0}
+ gen
+ 1:
+ push %b
+ dcr %a
+ jnz {label,1b}
pat zer
-kills ALL
-uses hl_or_de={const2,$1/2}, hl_or_de={const2,0}, areg
-gen xra a
- 1:
- push %b
- dcx %a
- cmp %a.2
- jnz {label,1b}
- cmp %a.1
- jnz {label,1b}
+ kills ALL
+ uses regpair={const2,$1/2}, regpair={const2,0}, areg
+ gen
+ xra a
+ 1:
+ push %b
+ dcx %a
+ cmp %a.2
+ jnz {label,1b}
+ cmp %a.1
+ jnz {label,1b}
/*****************************************/
/* Group 8: Convert instructions */
pat loc loc cii $1==$2
pat loc loc cii $1==2 && $2==4
- with hl_or_de
- uses hl_or_de, areg
+ with regpair
+ uses regpair, areg
gen
mov a, %1.1
ral.
yields %a %1
pat loc loc cii $1==4 && $2==2
- with hl_or_de hl_or_de
+ with regpair regpair
yields %1
pat loc loc cii $1==1 && $2==2
with reg
- uses reusing %1, areg=%1, hl_or_de
+ uses reusing %1, areg=%1, regpair
gen
mov %b.2, a
ral.
sbb a
mov %b.1, a
yields %b
- with hl_or_de
+ with regpair
uses areg=%1.2
gen
ral.
pat loc loc cii $1==1 && $2==4
with areg
- uses hl_or_de, hl_or_de
+ uses regpair, regpair
gen
mov %b.2, a
ral.
mov %a.2, a
mov %a.1, a
yields %a %b
- with hlreg
- uses dereg, areg
- gen
- mov a, l
- ral.
- sbb a
- mov h, a
- mov e, a
- mov d, a
- yields de hl
pat cii
kills ALL
with src1or2 src1or2 yields %1
pat loc loc cuu $1==1 && $2==2
-with reg
- uses reusing %1, hl_or_de
- gen move %1,%a yields %a
-with hl_or_de
- gen move {const1,0},%1.1 yields %1
+ with reg
+ uses reusing %1, regpair
+ gen
+ move %1,%a
+ yields %a
+ with regpair
+ gen
+ move {const1,0},%1.1
+ yields %1
pat loc loc cuu $1==1 && $2==4
-with reg
- uses reusing %1, hl_or_de
- gen move %1,%a yields {const2,0} %a
-with hl_or_de
- gen move {const1,0},%1.1 yields {const2,0} %1
+ with reg
+ uses reusing %1, regpair
+ gen
+ move %1,%a
+ yields {const2,0} %a
+ with regpair
+ gen
+ move {const1,0},%1.1
+ yields {const2,0} %1
pat cuu
kills ALL
leaving loc $1 cal ".cif4" asp $1-2
pat loc loc cif $1==2 && $2==8
-with hl_or_de
-gen push %1
- push %1
- push %1 leaving loc $1 cal ".cif8"
+ with regpair
+ gen
+ push %1
+ push %1
+ push %1
+ leaving loc $1 cal ".cif8"
pat loc loc cif $1==4 && $2==8
-with hl_or_de hl_or_de
-gen push %2
- push %2
- push %1 leaving loc $1 cal ".cif8"
+with regpair regpair
+ gen
+ push %2
+ push %2
+ push %1
+ leaving loc $1 cal ".cif8"
pat loc loc cuf $2==4
leaving loc $1 cal ".cuf4" asp $1-2
pat loc loc cuf $1==2 && $2==8
-with hl_or_de
-gen push %1
- push %1
- push %1 leaving loc $1 cal ".cuf8"
+ with regpair
+ gen
+ push %1
+ push %1
+ push %1
+ leaving loc $1 cal ".cuf8"
pat loc loc cuf $1==4 && $2==8
-with hl_or_de hl_or_de
-gen push %1
- push %2
- push %1 leaving loc $1 cal ".cuf8"
+ with regpair regpair
+ gen
+ push %1
+ push %2
+ push %1
+ leaving loc $1 cal ".cuf8"
pat loc loc cff $1==8 && $2==4 leaving cal ".cff4" asp 4
/*****************************************/
pat and $1==2
- with hl_or_de smallconst2
+ with regpair smallconst2
uses areg
gen
mov a, %1.2
mov %1.2, a
mvi %1.1, {const1, 0}
yields %1
- with hl_or_de const2
+ with regpair const2
uses areg
gen
mov a, %1.2
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 >> 8}
mov %2.1, a
yields %2
- with smallconst2 hl_or_de
+ with smallconst2 regpair
uses areg
gen
mov a, %2.2
mov %2.2, a
mvi %2.1, {const1, 0}
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a, %1.2
ana %2.1
mov %2.1, a
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a,%1.2
Call {label,".and"}
pat ior $1==2
- with hl_or_de smallconst2
+ with regpair smallconst2
uses areg
gen
mov a, %1.2
ori {const1, %2.num & 0xff}
mov %1.2, a
yields %1
- with hl_or_de const2
+ with regpair const2
uses areg
gen
mov a, %1.2
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 >> 8}
mov %2.1, a
yields %2
- with smallconst2 hl_or_de
+ with smallconst2 regpair
uses areg
gen
mov a, %2.2
ori {const1, %1.num & 0xff}
mov %2.2, a
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a, %1.2
ora %2.1
mov %2.1, a
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a,%1.2
gen Call {label,".ior"}
pat xor $1==2
- with hl_or_de smallconst2
+ with regpair smallconst2
uses areg
gen
mov a, %1.2
xri {const1, %2.num & 0xff}
mov %1.2, a
yields %1
- with hl_or_de const2
+ with regpair const2
uses areg
gen
mov a, %1.2
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 >> 8}
mov %2.1, a
yields %2
- with smallconst2 hl_or_de
+ with smallconst2 regpair
uses areg
gen
mov a, %2.2
xri {const1, %1.num & 0xff}
mov %2.2, a
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a, %1.2
xra %2.1
mov %2.1, a
yields %2
- with hl_or_de hl_or_de
+ with regpair regpair
uses areg
gen
mov a,%1.2
gen Call {label,".xor"}
pat com $1==2
-with hl_or_de
-uses areg
-gen mov a,%1.2
- cma.
- mov %1.2,a
- mov a,%1.1
- cma.
- mov %1.1,a yields %1
+ with regpair
+ uses areg
+ gen
+ mov a,%1.2
+ cma.
+ mov %1.2,a
+ mov a,%1.1
+ cma.
+ mov %1.1,a
+ yields %1
pat com defined($1)
kills ALL
gen Call {label,".rol4"}
pat ror $1==2
-with dereg hlreg
-kills ALL
-uses areg
-gen mov a,e
- ani {const1,15}
- jz {label,2f}
- mov e,a
- mov a,l
- 1:
- rar.
- mov a,h
- rar.
- mov h,a
- mov a,l
- rar.
- mov l,a
- dcr e
- jnz {label,1b}
- 2: yields hl
+ with regpair hlreg
+ kills ALL
+ uses areg
+ gen
+ mov a, %1.2
+ ani {const1,15}
+ jz {label,2f}
+ mov %1.2,a
+ mov a,l
+ 1:
+ rar.
+ mov a,h
+ rar.
+ mov h,a
+ mov a,l
+ rar.
+ mov l,a
+ dcr %1.2
+ jnz {label,1b}
+ 2: yields hl
pat ror $1==4
with dereg
gen dad hl yields hl leaving adi 2
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)!=0
-with hlreg
-uses dereg={const2,0-rom($1,1)}
-gen dad de
- dad hl yields hl leaving adi 2
+ with hlreg
+ uses regpair={const2,0-rom($1,1)}
+ gen
+ dad %a
+ dad hl
+ yields hl
+ leaving adi 2
pat lae aar $2==2 && rom($1,3)==4 && rom($1,1)==0
with hlreg
dad hl yields hl leaving adi 2
pat lae aar $2==2 && rom($1,3)==4 && rom($1,1)!=0
-with hlreg
-uses dereg={const2,0-rom($1,1)}
-gen dad de
- dad hl
- dad hl yields hl leaving adi 2
+ with hlreg
+ uses regpair={const2,0-rom($1,1)}
+ gen
+ dad %a
+ dad hl
+ dad hl
+ yields hl
+ leaving adi 2
pat lae aar $2==2 && rom($1,3)==8 && rom($1,1)==0
with hlreg
dad hl yields hl leaving adi 2
pat lae aar $2==2 && rom($1,3)==8 && rom($1,1)!=0
-with hlreg
-uses dereg={const2,0-rom($1,1)}
-gen dad de
- dad hl
- dad hl
- dad hl yields hl leaving adi 2
+ with hlreg
+ uses regpair={const2,0-rom($1,1)}
+ gen
+ dad %a
+ dad hl
+ dad hl
+ dad hl
+ yields hl
+ leaving adi 2
pat lar $1==2
kills ALL
gen Call {label,"eunimpl"}
pat lar !defined($1)
-with hl_or_de
-kills ALL
-uses areg
-gen mov a,%1.2
- cpi {const1,2}
- cnz {label,"eunimpl"}
- mov a,%1.1
- ora a
- cnz {label,"eunimpl"}
- Call {label,".lar2"}
+ with regpair
+ kills ALL
+ uses areg
+ gen
+ mov a,%1.2
+ cpi {const1,2}
+ cnz {label,"eunimpl"}
+ mov a,%1.1
+ ora a
+ cnz {label,"eunimpl"}
+ Call {label,".lar2"}
pat sar $1==2
kills ALL
gen Call {label,"eunimpl"}
pat sar !defined($1)
-with hl_or_de
-kills ALL
-uses areg
-gen mov a,%1.2
- cpi {const1,2}
- cnz {label,"eunimpl"}
- mov a,%1.1
- ora a
- cnz {label,"eunimpl"}
- Call {label,".sar2"}
+ with regpair
+ kills ALL
+ uses areg
+ gen
+ mov a,%1.2
+ cpi {const1,2}
+ cnz {label,"eunimpl"}
+ mov a,%1.1
+ ora a
+ cnz {label,"eunimpl"}
+ Call {label,".sar2"}
pat aar $1==2
kills ALL
gen Call {label,"eunimpl"}
pat aar !defined($1)
-with hl_or_de
-kills ALL
-uses areg
-gen mov a,%1.2
- cpi {const1,2}
- cnz {label,"eunimpl"}
- mov a,%1.1
- ora a
- cnz {label,"eunimpl"}
- Call {label,".aar2"}
+ with regpair
+ kills ALL
+ uses areg
+ gen
+ mov a,%1.2
+ cpi {const1,2}
+ cnz {label,"eunimpl"}
+ mov a,%1.1
+ ora a
+ cnz {label,"eunimpl"}
+ Call {label,".aar2"}
/***********************************************/
/* Group 12: Compare instructions */
leaving cal ".cmf8" asp 16 lfr 2
pat cmu $1==2
-with hl_or_de hl_or_de
-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
+ 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
pat cmp leaving cmu 2
pat tlt
-with hl_or_de
-uses areg
-gen mov a,%1.1
- ral.
- mvi a,{const1,0}
- mov %1.1,a
- adc a
- mov %1.2,a yields %1
+ with regpair
+ uses areg
+ gen
+ mov a,%1.1
+ ral.
+ mvi a,{const1,0}
+ mov %1.1,a
+ adc a
+ mov %1.2,a
+ yields %1
pat tle
-with hl_or_de
-uses hl_or_de={const2,1}, areg
-gen xra a
- add %1.1
- jm {label,2f}
- jnz {label,1f}
- xra a
- add %1.2
- jz {label,2f}
- 1:
- dcx %a
- 2: yields %a
+ with regpair
+ uses regpair={const2,1}, areg
+ gen
+ xra a
+ add %1.1
+ jm {label,2f}
+ jnz {label,1f}
+ xra a
+ add %1.2
+ jz {label,2f}
+ 1:
+ dcx %a
+ 2:
+ yields %a
pat teq
-with hl_or_de
-uses areg
-gen mov a,%1.1
- ora %1.2
- move {const2,0},%1
- jnz {label,1f}
- inx %1
- 1: yields %1
+ with regpair
+ uses areg
+ gen
+ mov a,%1.1
+ ora %1.2
+ move {const2,0},%1
+ jnz {label,1f}
+ inx %1
+ 1:
+ yields %1
pat tne
-with hl_or_de
-uses areg
-gen mov a,%1.1
- ora %1.2
- move {const2,0},%1
- jz {label,1f}
- inx %1
- 1: yields %1
+ with regpair
+ uses areg
+ gen
+ mov a,%1.1
+ ora %1.2
+ move {const2,0},%1
+ jz {label,1f}
+ inx %1
+ 1:
+ yields %1
pat tge
-with hl_or_de
-uses areg
-gen mov a,%1.1
- ral.
- cmc.
- mvi a,{const1,0}
- mov %1.1,a
- adc a
- mov %1.2,a yields %1
+ with regpair
+ uses areg
+ gen
+ mov a,%1.1
+ ral.
+ cmc.
+ mvi a,{const1,0}
+ mov %1.1,a
+ adc a
+ mov %1.2,a
+ yields %1
pat tgt
-with hl_or_de
-uses hl_or_de={const2,0}, areg
-gen xra a
- add %1.1
- jm {label,2f}
- jnz {label,1f}
- xra a
- add %1.2
- jz {label,2f}
- 1:
- inx %a
- 2: yields %a
+ with regpair
+ uses regpair={const2,0}, areg
+ gen
+ xra a
+ add %1.1
+ jm {label,2f}
+ jnz {label,1f}
+ xra a
+ add %1.2
+ jz {label,2f}
+ 1:
+ inx %a
+ 2:
+ yields %a
pat loc cmi teq and $1>=0 && $1<=255 && $2==2 && $4==2
-with exact areg hl_or_de
-gen cpi {const1,$1}
- jz {label,1f}
- move {const2,0},%2
- 1: yields %2
-with hl_or_de hl_or_de
-uses areg
-gen mov a,%1.2
- cpi {const1,$1}
- jnz {label,1f}
- mov a,%1.1
- ora a
- jz {label,2f}
- 1:
- move {const2,0},%2
- 2: yields %2
+ with exact areg regpair
+ gen
+ cpi {const1,$1}
+ jz {label,1f}
+ move {const2,0},%2
+ 1:
+ yields %2
+ with regpair regpair
+ uses areg
+ gen
+ mov a,%1.2
+ cpi {const1,$1}
+ jnz {label,1f}
+ mov a,%1.1
+ ora a
+ jz {label,2f}
+ 1:
+ move {const2,0},%2
+ 2:
+ yields %2
pat loc cmi tne and $1>=0 && $1<=255 && $2==2 && $4==2
-with exact areg hl_or_de
-gen cpi {const1,$1}
- jnz {label,1f}
- move {const2,0},%2
- 1: yields %2
-with hl_or_de hl_or_de
-uses areg
-gen mov a,%1.2
- cpi {const1,$1}
- jnz {label,1f}
- mov a,%1.1
- ora a
- jnz {label,1f}
- move {const2,0},%2
- 1: yields %2
+ with exact areg regpair
+ gen
+ cpi {const1,$1}
+ jnz {label,1f}
+ move {const2,0},%2
+ 1:
+ yields %2
+ with regpair regpair
+ uses areg
+ gen
+ mov a,%1.2
+ cpi {const1,$1}
+ jnz {label,1f}
+ mov a,%1.1
+ ora a
+ jnz {label,1f}
+ move {const2,0},%2
+ 1:
+ yields %2
pat loc cmi teq ior $1>=0 && $1<=255 && $2==2 && $4==2
-with exact areg hl_or_de
+with exact areg regpair
gen cpi {const1,$1}
jnz {label,1f}
move {const2,1},%2
1: yields %2
-with hl_or_de hl_or_de
+with regpair regpair
uses areg
gen mov a,%1.2
cpi {const1,$1}
1: yields %2
pat loc cmi tne ior $1>=0 && $1<=255 && $2==2 && $4==2
-with exact areg hl_or_de
+with exact areg regpair
gen cpi {const1,$1}
jz {label,1f}
move {const2,1},%2
1: yields %2
-with hl_or_de hl_or_de
+with regpair regpair
uses areg
gen mov a,%1.2
cpi {const1,$1}
pat loc cmi teq $1>=0 && $1<=255 && $2==2
with exact areg
-uses hl_or_de={const2,0}
+uses regpair={const2,0}
gen cpi {const1,$1}
jnz {label,1f}
inx %a
1: yields %a
-with hl_or_de
-uses hl_or_de={const2,0}, areg
+with regpair
+uses regpair={const2,0}, areg
gen mov a,%1.2
cpi {const1,$1}
jnz {label,1f}
pat loc cmi tne $1>=0 && $1<=255 && $2==2
with exact areg
-uses hl_or_de={const2,0}
+uses regpair={const2,0}
gen cpi {const1,$1}
jz {label,1f}
inx %a
1: yields %a
-with hl_or_de
-uses hl_or_de={const2,1}, areg
+with regpair
+uses regpair={const2,1}, areg
gen mov a,%1.2
cpi {const1,$1}
jnz {label,1f}
pat loc cmi $1>=0 && $1<=255 && $2==2
with exact areg
-uses hl_or_de
+uses regpair
gen sui {const1,$1}
mov %a.2,a
rar.
jmp {label,$1}
pat blt
- with const2 hl_or_de STACK
+ with const2 regpair STACK
uses areg
gen
mov a, %2.1
mov a, %2.1
sbi {const1, (%1.num >> 8) ^ 0x80}
jc {label, $1}
- with hl_or_de const2 STACK
+ with regpair const2 STACK
uses areg
gen
mov a, %1.1
mvi a, {const1, (%2.num >> 8) ^ 0x80}
sbb %1.1
jc {label, $1}
- with hl_or_de hl_or_de STACK
+ with regpair regpair STACK
uses areg
gen
mov a, %2.1
blt $1
pat bge
- with const2 hl_or_de STACK
+ with const2 regpair STACK
uses areg
gen
mov a, %2.1
mov a, %2.1
sbi {const1, (%1.num >> 8) ^ 0x80}
jnc {label, $1}
- with hl_or_de const2 STACK
+ with regpair const2 STACK
uses areg
gen
mov a, %1.1
mvi a, {const1, (%2.num >> 8) ^ 0x80}
sbb %1.1
jnc {label, $1}
- with hl_or_de hl_or_de STACK
+ with regpair regpair STACK
uses areg
gen
mov a, %2.1
bge $1
pat beq
- with const2 hl_or_de STACK
+ with const2 regpair STACK
uses areg
gen
mov a, %2.2
cpi {const1, %1.num >> 8}
jz {label, $1}
1:
- with hl_or_de const2 STACK
+ with regpair const2 STACK
leaving
exg 2
beq $1
- with hl_or_de hl_or_de STACK
+ with regpair regpair STACK
uses areg
gen
mov a,%2.2
1:
pat bne
- with const2 hl_or_de STACK
+ with const2 regpair STACK
uses areg
gen
mov a, %2.2
mov a, %2.1
cpi {const1, %1.num >> 8}
jnz {label, $1}
- with hl_or_de const2 STACK
+ with regpair const2 STACK
leaving
exg 2
beq $1
- with hl_or_de hl_or_de STACK
+ with regpair regpair STACK
uses areg
gen
mov a,%2.2
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 hl_or_de STACK
+with regpair STACK
uses areg
gen xra a
add %1.1
1:
pat zeq
-with hl_or_de STACK
+with regpair STACK
uses areg
gen mov a,%1.1
ora %1.2
jz {label,$1}
pat zne
-with hl_or_de STACK
+with regpair STACK
uses areg
gen mov a,%1.1
ora %1.2
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 hl_or_de STACK
+with regpair STACK
uses areg
gen xra a
add %1.1
jnz {label,$2}
pat ior zeq $1==2
-with hl_or_de hl_or_de STACK
-uses areg
-gen mov a,%1.1
- ora %1.2
- ora %2.1
- ora %2.2
- jz {label,$2}
+ with regpair regpair STACK
+ uses areg
+ gen
+ mov a,%1.1
+ ora %1.2
+ ora %2.1
+ ora %2.2
+ jz {label,$2}
pat ior zne $1==2
-with hl_or_de hl_or_de STACK
-uses areg
-gen mov a,%1.1
- ora %1.2
- ora %2.1
- ora %2.2
- jnz {label,$2}
+ with regpair regpair STACK
+ uses areg
+ gen
+ mov a,%1.1
+ ora %1.2
+ ora %2.1
+ ora %2.2
+ jnz {label,$2}
/*********************************************/
/* Group 14: Procedure call instructions */
kills ALL
gen Call {label, ".pchl"}
-pat lfr $1==2 yields de
+pat lfr $1==2
+ yields de
-pat lfr $1<=8
-with STACK
-uses areg={const1,$1/2}, hlreg={label,".fra"+$1}, dereg
-gen 1:
- dcx hl
- mov d,{m}
- dcx hl
- mov e,{m}
- push de
- dcr a
- jnz {label,1b}
+pat lfr $1<=8
+ with STACK
+ uses areg={const1,$1/2}, hlreg={label,".fra"+$1}, dereg
+ gen
+ 1:
+ dcx hl
+ mov %c.1, {m}
+ dcx hl
+ mov %c.2, {m}
+ push %c
+ dcr a
+ jnz {label,1b}
pat lfr ret $1==$2 leaving ret 0
gen jmp {label, ".ret"}
pat ret $1<=8
-with STACK
-uses areg={const1,$1/2}, hlreg={label,".fra"}, dereg
-gen 1:
- pop de
- mov {m},e
- inx hl
- mov {m},d
- inx hl
- dcr a
- jnz {label,1b}
- jmp {label, ".ret"}
+ with STACK
+ uses areg={const1,$1/2}, hlreg={label,".fra"}, dereg
+ gen
+ 1:
+ pop %c
+ mov {m}, %c.2
+ inx hl
+ mov {m}, %c.1
+ inx hl
+ dcr a
+ jnz {label,1b}
+ jmp {label, ".ret"}
/******************************************/
/* Group 15: Miscellaneous */
pat asp ($1>0) && ($1<12)
with STACK
- uses hlreg
+ uses regpair
gen
- pop hl
+ pop %a
leaving
asp $1-2