ack/mach/i80/ncg/table

2066 lines
33 KiB
Plaintext
Raw Normal View History

1985-01-17 14:31:34 +00:00
/************************************************************/
/************************************************************/
/******* ******/
/******* 8 0 8 0 B A C K E N D T A B L E ******/
/******* ******/
/************************************************************/
/************************************************************/
1994-06-24 14:02:31 +00:00
rcsid = "$Id$"
1985-03-18 12:55:07 +00:00
1985-01-17 14:31:34 +00:00
EM_WSIZE = 2
EM_PSIZE = 2
EM_BSIZE = 4
SL=4
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 */
dereg /* de-register-pair */
hlreg /* hl-register-pair */
1985-03-04 13:42:38 +00:00
hl_or_de /* de- or hl-register-pair */
1985-01-17 14:31:34 +00:00
localbase
stackpointer
1985-03-04 13:42:38 +00:00
psword
1985-01-17 14:31:34 +00:00
REGISTERS
a :areg,reg.
b,c :lbreg.
d,e,h,l :reg.
lb("b")=b+c :regpair, localbase, regind.
1985-03-04 13:42:38 +00:00
de("d")=d+e :regpair, regind, dereg, hl_or_de.
hl("h")=h+l :regpair, hlreg, hl_or_de.
1985-01-17 14:31:34 +00:00
sp :stackpointer.
1985-03-04 13:42:38 +00:00
psw=a :psword. /* in fact psw also includes
condition codes */
1985-01-17 14:31:34 +00:00
TOKENS
1985-03-04 13:42:38 +00:00
const1 = { INT num; } 1 num.
const2 = { INT num; } 2 num.
label = { ADDR off; } 2 off.
m = { } 2 cost(0,3) "m".
1985-01-17 14:31:34 +00:00
SETS
1985-03-04 13:42:38 +00:00
reg1 = reg + lbreg + m.
b_d_h_sp = regpair + stackpointer.
b_d_h_psw = regpair + psword.
immediate = const2 + label.
src1 = reg.
src2 = hl_or_de + const2 + label.
src1or2 = src1 + src2.
1985-01-17 14:31:34 +00:00
INSTRUCTIONS
1985-03-04 13:42:38 +00:00
/* aci const1:ro kills a:cc cost(2, 7). */
adc reg1:ro kills a:cc cost(1, 4).
add reg1:ro kills a:cc cost(1, 4).
/* adi const1:ro kills a:cc cost(2, 7). */
ana reg1:ro kills a:cc cost(1, 4).
ani const1:ro kills a:cc cost(2, 7).
Call "call" label:ro cost(3,17).
1985-01-17 14:31:34 +00:00
/* 'call' is a reserved word */
1985-03-04 13:42:38 +00:00
/* cc label:ro cost(3,14). */
/* cm label:ro cost(3,14). */
cma kills a cost(3,14).
cmc kills:cc cost(1, 4).
cmp reg1:ro kills:cc cost(1, 4).
/* cnc label:ro cost(3,14). */
cnz label:ro cost(3,14).
/* cp label:ro cost(3,14). */
/* cpe label:ro cost(3,14). */
cpi const1:ro kills:cc cost(2, 7).
/* cpo label:ro cost(3,14). */
/* cz label:ro cost(3,14). */
/* daa kills a:cc cost(1, 4). */
dad b_d_h_sp:ro kills hl:cc cost(1,10).
dcr reg+lbreg: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 m:rw:cc cost(1, 7).
inx b_d_h_sp:rw cost(1, 5).
jc label:ro cost(3,10).
jm label:ro cost(3,10).
jmp label:ro cost(3,10).
jnc label:ro cost(3,10).
jnz label:ro cost(3,10).
jp label:ro cost(3,10).
/* jpe label:ro cost(3,10). */
/* jpo label:ro cost(3,10). */
jz label:ro cost(3,10).
lda label:ro kills a cost(3,13).
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 m:wo,reg1:ro cost(1, 4).
mov reg1:wo,m:ro cost(1, 4).
mvi reg1:wo,const1:ro cost(2, 7).
/* nop cost(1, 3). */
ora reg1:ro kills a:cc cost(1, 4).
/* ori const1:ro kills a:cc cost(2, 7). */
/* out const1:ro cost(2,10). */
pchl cost(1, 5).
pop b_d_h_psw:wo cost(1,10).
push b_d_h_psw:ro cost(1,10).
ral kills a:cc cost(1, 4).
rar kills a:cc cost(1, 4).
/* rc cost(1, 8). */
ret cost(1,10).
rlc kills a:cc cost(1, 4).
/* rm cost(1, 8). */
/* rnc cost(1, 8). */
/* rnz cost(1, 8). */
/* rp cost(1, 8). */
/* rpe cost(1, 8). */
/* rpo cost(1, 8). */
rrc kills a:cc cost(1, 4).
/* rst const1:ro cost(1,11). */
/* rz cost(1, 8). */
sbb reg1:ro kills a:cc cost(1, 4).
/* sbi const1:ro kills a:cc cost(2, 7). */
shld label:ro cost(3,16).
sphl cost(1, 5).
sta label:ro cost(3,13).
stax regind:ro cost(1, 7).
/* stc kills:cc cost(1, 4). */
sub reg1:ro kills a:cc cost(1, 4).
sui const1:ro kills a:cc cost(2, 7).
xchg kills de hl cost(1, 4).
xra reg1:ro kills a:cc cost(1, 4).
/* xri const1:ro kills a:cc cost(2, 7). */
xthl kills hl cost(1,18).
1985-01-17 14:31:34 +00:00
MOVES
from reg to reg
gen mov %2,%1
1985-03-04 13:42:38 +00:00
from const1 %num==0 to areg
gen xra a
from const1 to reg
gen mvi %2,%1
1985-01-17 14:31:34 +00:00
1985-03-04 13:42:38 +00:00
from immediate to b_d_h_sp
1985-01-17 14:31:34 +00:00
gen lxi %2,%1
from reg to regpair
gen mov %2.2,%1
mvi %2.1,{const1,0}
1985-01-17 14:31:34 +00:00
from regpair to regpair
gen mov %2.1,%1.1
mov %2.2,%1.2
TESTS
1985-03-04 13:42:38 +00:00
to test areg /* dummy test, never used */
gen ora a
1985-01-17 14:31:34 +00:00
STACKINGRULES
from regpair to STACK
gen push %1
1985-03-04 13:42:38 +00:00
from immediate + reg to STACK
uses hl_or_de
1985-01-17 14:31:34 +00:00
gen move %1,%a
push %a
1985-03-04 13:42:38 +00:00
from immediate + reg to STACK
1985-01-17 14:31:34 +00:00
gen push hl
move %1,hl
xthl.
COERCIONS
from STACK
uses regpair
gen pop %a yields %a
from STACK
1985-03-04 13:42:38 +00:00
uses hl_or_de
1985-01-17 14:31:34 +00:00
gen pop %a yields %a.2
from STACK
uses areg
gen dcx sp
pop psw
inx sp yields a
from immediate
1985-01-17 14:31:34 +00:00
uses regpair
gen move %1,%a yields %a
1985-03-04 13:42:38 +00:00
from hl_or_de
uses hl_or_de
gen xchg. yields %a
from regpair
uses regpair
1985-01-17 14:31:34 +00:00
gen move %1,%a yields %a
from reg
1985-03-04 13:42:38 +00:00
uses reusing %1, hl_or_de
gen move %1,%a.2
move {const1,0},%a.1 yields %a
from hl_or_de yields %1.2
1985-01-17 14:31:34 +00:00
1985-03-04 13:42:38 +00:00
from const2
uses hl_or_de
gen move %1,%a yields %a.2
1985-01-17 14:31:34 +00:00
1985-03-04 13:42:38 +00:00
from hl_or_de
uses areg
1985-03-04 13:42:38 +00:00
gen move %1.2,a yields a
1985-01-17 14:31:34 +00:00
PATTERNS
/*********************************************/
/* Group 1: Load instructions */
/*********************************************/
pat loc yields {const2,$1}
pat ldc yields {const2,highw($1)}
{const2,loww($1)}
pat lol
uses hlreg={const2,$1}, dereg
gen dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m} yields de
1985-01-17 14:31:34 +00:00
pat loe
uses hlreg
gen lhld {label,$1} yields hl
pat lil
uses hlreg={const2,$1}, dereg
gen dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
1985-01-17 14:31:34 +00:00
mov l,e
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m} yields de
1985-01-17 14:31:34 +00:00
pat lof
1985-03-04 13:42:38 +00:00
with hl_or_de
kills hl_or_de
uses hl_or_de={const2,$1}
1985-01-17 14:31:34 +00:00
gen dad de
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m} yields de
1985-01-17 14:31:34 +00:00
pat lal
uses hlreg={const2,$1}
gen dad lb yields hl
pat lae yields {label,$1}
pat lxl $1==0 yields lb
pat lxl $1==1
uses dereg, hlreg
gen move {const2,SL},hl
dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m} yields de
1985-01-17 14:31:34 +00:00
1985-03-04 13:42:38 +00:00
pat lxl $1>1 && $1<256
1985-01-17 14:31:34 +00:00
uses dereg, areg={const1,$1}, hlreg
gen move lb,de
1:
lxi hl,{const2,SL}
dad de
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b} yields de
1985-01-17 14:31:34 +00:00
pat lxa $1==0
uses hlreg
gen move {const2,SL},hl
dad lb yields hl
pat lxa $1==1
uses dereg, hlreg
gen move {const2,SL},hl
dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
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
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
with hlreg
1985-03-18 10:00:30 +00:00
uses reusing %1, reg
1985-03-04 13:42:38 +00:00
gen mov %a,{m} yields %a
1985-01-17 14:31:34 +00:00
pat loi $1==2
with exact label
gen lhld %1 yields hl
with hlreg
uses dereg
1985-03-04 13:42:38 +00:00
gen mov e,{m}
1985-01-17 14:31:34 +00:00
inx %1
1985-03-04 13:42:38 +00:00
mov d,{m} yields de
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
with hlreg
uses dereg, areg
1985-03-04 13:42:38 +00:00
gen mov e,{m}
1985-01-17 14:31:34 +00:00
inx %1
1985-03-04 13:42:38 +00:00
mov d,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov a,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
mov l,a yields hl de
1985-01-17 14:31:34 +00:00
pat loi $1<=510
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
uses hl_or_de={const2,$1-1}, areg
1985-01-17 14:31:34 +00:00
gen dad de
mvi a,{const1,$1/2}
1:
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
dcx hl
push de
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
pat loi $1>=512
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".loi"}
pat los $1==2
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".loi"}
pat ldl
with STACK
uses dereg, hlreg={const2,$1+3}
gen dad lb
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
dcx hl
push de
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m} yields de
1985-01-17 14:31:34 +00:00
pat lde
with STACK
gen lhld {label,$1+2}
push hl
lhld {label,$1} yields hl
with
uses dereg, hlreg
gen lhld {label,$1}
xchg.
lhld {label,$1+2} yields hl de
with
uses dereg, hlreg
gen lhld {label,$1+2}
xchg.
lhld {label,$1} yields de hl
1985-01-17 14:31:34 +00:00
pat ldf
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
uses hl_or_de={const2,$1+3}
1985-01-17 14:31:34 +00:00
gen dad de
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
dcx hl
push de
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m} yields de
1985-01-17 14:31:34 +00:00
pat lpi
1985-03-04 13:42:38 +00:00
uses hl_or_de={label,$1} yields %a
1985-01-17 14:31:34 +00:00
/******************************************/
/* Group 2: Store instructions */
/******************************************/
pat stl lol $1==$2
with dereg yields de de leaving stl $1
pat stl
with dereg
uses hlreg={const2,$1}
gen dad lb
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
pat ste loe $1==$2
with hlreg yields hl hl leaving ste $1
pat ste
with hlreg
gen shld {label,$1}
pat sil
with dereg
uses hlreg={const2,$1}, areg
gen dad lb
1985-03-04 13:42:38 +00:00
mov a,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
1985-01-17 14:31:34 +00:00
mov l,a
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
pat sil lil $1==$2
with dereg
uses hlreg={const2,$1}, areg
gen dad lb
1985-03-04 13:42:38 +00:00
mov a,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
mov l,a
1985-03-04 13:42:38 +00:00
mov {m},e
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d yields de
pat lil loc adi sil $1==$4 && $3==2
uses hlreg={const2,$1}, dereg, areg
gen dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
mov l,e
1985-03-04 13:42:38 +00:00
mov e,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
push hl
lxi hl,{const2,$2}
dad de
xchg.
pop hl
1985-03-04 13:42:38 +00:00
mov {m},d
dcx hl
1985-03-04 13:42:38 +00:00
mov {m},e
pat lil inc sil $1==$3
uses hlreg={const2,$1}, areg
gen dad lb
1985-03-04 13:42:38 +00:00
mov a,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
mov l,a
1985-03-04 13:42:38 +00:00
inr {m}
jnz {label,1f}
inx hl
1985-03-04 13:42:38 +00:00
inr {m}
1:
pat lil dec sil $1==$3
uses hlreg={const2,$1}, dereg
gen dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov h,{m}
mov l,e
1985-03-04 13:42:38 +00:00
mov e,{m}
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
dcx de
1985-03-04 13:42:38 +00:00
mov {m},d
dcx hl
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
pat stf
with hl_or_de STACK
1985-03-04 13:42:38 +00:00
uses hl_or_de={const2,$1}
1985-01-17 14:31:34 +00:00
gen dad de
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
pat sti $1==1
1985-03-04 13:42:38 +00:00
with label areg
1985-01-17 14:31:34 +00:00
gen sta %1
1985-03-04 13:42:38 +00:00
with dereg areg
1985-01-17 14:31:34 +00:00
gen stax de
with hlreg reg
1985-03-04 13:42:38 +00:00
gen mov {m},%2
1985-01-17 14:31:34 +00:00
pat sti $1==2
1985-03-04 13:42:38 +00:00
with label hlreg
1985-01-17 14:31:34 +00:00
gen shld %1
with hlreg dereg
1985-03-04 13:42:38 +00:00
gen mov {m},e
1985-01-17 14:31:34 +00:00
inx %1
1985-03-04 13:42:38 +00:00
mov {m},d
with dereg hlreg
gen xchg.
mov {m},e
inx %2
mov {m},d
1985-01-17 14:31:34 +00:00
pat sti $1==4
1985-03-04 13:42:38 +00:00
with label hlreg dereg
1985-01-17 14:31:34 +00:00
gen shld %1
xchg.
shld {label,%1.off+2}
1985-03-04 13:42:38 +00:00
with label dereg hlreg
gen shld {label,%1.off+2}
xchg.
shld %1
with hlreg dereg
kills ALL
1985-03-04 13:42:38 +00:00
gen mov {m},e
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
inx hl
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
1985-03-04 13:42:38 +00:00
pat sti $1<512
with hlreg
kills ALL
uses areg={const1,$1/2}, dereg
1985-01-17 14:31:34 +00:00
gen 1:
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
inx hl
1985-01-17 14:31:34 +00:00
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
pat sti
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".sti"}
pat sts $1==2
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".sti"}
pat sdl
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
uses hlreg={const2,$1}
gen dad lb
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
inx hl
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
pat sde
with hlreg
kills ALL
1985-01-17 14:31:34 +00:00
gen shld {label,$1}
pop hl
shld {label,$1+2}
with hlreg dereg
kills ALL
gen shld {label,$1}
xchg.
shld {label,$1+2}
with dereg hlreg
kills ALL
gen shld {label,$1+2}
xchg.
shld {label,$1}
1985-01-17 14:31:34 +00:00
pat sdf
with hl_or_de
kills ALL
1985-03-04 13:42:38 +00:00
uses hl_or_de={const2,$1}
1985-01-17 14:31:34 +00:00
gen dad de
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
inx hl
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
/****************************************/
/* Group 3: Integer arithmetic */
/****************************************/
pat adi $1==2
with hlreg dereg
gen dad de yields hl
1985-01-17 14:31:34 +00:00
with dereg hlreg
gen dad de yields hl
with hlreg hlreg
gen dad hl yields hl
1985-03-04 13:42:38 +00:00
with dereg dereg
gen xchg.
dad hl yields hl
1985-01-17 14:31:34 +00:00
pat adi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".adi4"}
pat sbi $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.2
sub %1.2
1985-03-04 13:42:38 +00:00
mov %1.2,a
1985-01-17 14:31:34 +00:00
mov a,%2.1
sbb %1.1
1985-03-04 13:42:38 +00:00
mov %1.1,a yields %1
with hl_or_de hl_or_de
uses areg
gen mov a,%2.2
sub %1.2
1985-03-04 13:42:38 +00:00
mov %2.2,a
mov a,%2.1
sbb %1.1
1985-03-04 13:42:38 +00:00
mov %2.1,a yields %2
1985-01-17 14:31:34 +00:00
pat sbi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".sbi4"}
pat mli $1==2
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".mli2"} yields de
pat mli $1==4
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".mli4"}
pat dvi $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,129}
gen Call {label,".dvi2"} yields de
pat dvi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,129}
gen Call {label,".dvi4"}
pat rmi $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,128}
gen Call {label,".dvi2"} yields de
pat rmi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,128}
gen Call {label,".dvi4"}
pat ngi $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
pat ngi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".ngi4"}
pat loc sli ($1 == 8) && ($2 == 2)
with hl_or_de
gen move %1.2, %1.1
mvi %1.2, {const1,0} yields %1
1985-01-17 14:31:34 +00:00
pat sli $1==2
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".sli2"} yields de
pat sli $1==4
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".sli4"}
pat sri $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".sri2"} yields de
pat sri $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".sri4"}
/********************************************/
/* Group 4: Unsigned arithmetic */
/********************************************/
pat adu leaving adi $1
pat sbu leaving sbi $1
pat mlu $1==2
kills ALL
gen Call {label,".mlu2"} yields de
pat mlu $1==4
kills ALL
gen Call {label,".mli4"}
1985-01-17 14:31:34 +00:00
pat dvu $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".dvi2"} yields de
pat dvu $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".dvi4"}
pat rmu $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".dvi2"} yields de
pat rmu $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".dvi4"}
pat slu leaving sli $1
pat loc sru ($1 == 8) && ($2 == 2)
with hl_or_de
gen move %1.1, %1.2
mvi %1.1, {const1,0} yields %1
1985-01-17 14:31:34 +00:00
pat sru $1==2
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".sri2"} yields de
pat sru $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".sri4"}
1985-03-04 13:42:38 +00:00
/********************************************/
1985-03-18 10:00:30 +00:00
/* Group 5: Floating point arithmetic */
1985-03-04 13:42:38 +00:00
/********************************************/
pat adf $1==4
kills ALL
gen Call {label,".adf4"}
pat adf $1==8
kills ALL
gen Call {label,".adf8"}
pat sbf $1==4
kills ALL
gen Call {label,".sbf4"}
pat sbf $1==8
kills ALL
gen Call {label,".sbf8"}
pat mlf $1==4
kills ALL
gen Call {label,".mlf4"}
pat mlf $1==8
kills ALL
gen Call {label,".mlf8"}
1985-03-18 10:00:30 +00:00
pat dvf $1==4
kills ALL
gen Call {label,".dvf4"}
pat dvf $1==8
kills ALL
gen Call {label,".dvf8"}
pat ngf $1==4
kills ALL
gen Call {label,".ngf4"}
pat ngf $1==8
kills ALL
gen Call {label,".ngf8"}
pat fif $1==4
kills ALL
gen Call {label,".fif4"}
pat fif $1==8
kills ALL
gen Call {label,".fif8"}
pat fef $1==4
kills ALL
gen Call {label,".fef4"}
pat fef $1==8
kills ALL
gen Call {label,".fef8"}
1985-03-04 13:42:38 +00:00
1985-01-17 14:31:34 +00:00
/********************************************/
/* Group 6: Pointer arithmetic */
/********************************************/
pat adp $1==0 /* do nothing */
pat adp $1==1
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen inx %1 yields %1
pat adp $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen inx %1
inx %1 yields %1
pat adp $1==0-1
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen dcx %1 yields %1
pat adp $1==0-2
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen dcx %1
dcx %1 yields %1
pat adp
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,$1}
1985-01-17 14:31:34 +00:00
gen dad de yields hl
pat ads $1==2 leaving adi 2
pat sbs $1==2 leaving sbi 2
/********************************************/
/* Group 7: Increment/ decrement/ zero */
/********************************************/
pat inc
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen inx %1 yields %1
pat inl
uses hlreg={const2,$1}
1985-01-17 14:31:34 +00:00
gen dad lb
1985-03-04 13:42:38 +00:00
inr {m}
jnz {label,1f}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
inr {m}
1985-01-17 14:31:34 +00:00
1:
pat ine
uses hlreg={label,$1}
1985-03-04 13:42:38 +00:00
gen inr {m}
jnz {label,1f}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
inr {m}
1985-01-17 14:31:34 +00:00
1:
pat dec
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen dcx %1 yields %1
pat del
uses hlreg={const2,$1}, dereg
gen dad lb
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx de
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
pat dee
uses hlreg
gen lhld {label,$1}
dcx hl
shld {label,$1}
pat zrl
uses hlreg={const2,$1}, areg
gen dad lb
xra a
1985-03-04 13:42:38 +00:00
mov {m},a
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},a
1985-01-17 14:31:34 +00:00
pat zre
uses hlreg={const2,0}
gen shld {label,$1}
pat zrf $1==4
kills ALL
gen Call {label,".zrf4"}
pat zrf $1==8
kills ALL
gen Call {label,".zrf8"}
1985-03-18 10:00:30 +00:00
1985-01-17 14:31:34 +00:00
pat zer $1==2 yields {const2,0}
pat zer $1==4 yields {const2,0} {const2,0}
pat zer $1<511
kills ALL
1985-03-04 13:42:38 +00:00
uses reg={const1,$1/2}, hl_or_de={const2,0}
1985-01-17 14:31:34 +00:00
gen 1:
push %b
dcr %a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
pat zer
kills ALL
1985-03-04 13:42:38 +00:00
uses hl_or_de={const2,$1/2}, hl_or_de={const2,0}, areg
1985-01-17 14:31:34 +00:00
gen xra a
1:
push %b
dcx %a
cmp %a.2
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
cmp %a.1
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
/*****************************************/
/* Group 8: Convert instructions */
/*****************************************/
pat loc loc cii $1==$2
pat loc loc cii $1==2 && $2==4
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,0}, areg
gen mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jp {label,1f}
lxi %a,{const2,0-1}
1: yields %a %1
1985-01-17 14:31:34 +00:00
pat loc loc cii $1==4 && $2==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de yields %1
1985-01-17 14:31:34 +00:00
pat loc loc cii $1==1 && $2==2
with reg
1985-03-18 10:00:30 +00:00
uses reusing %1, areg=%1, hl_or_de
gen move {const1,0},%b.1
1985-01-17 14:31:34 +00:00
move a,%b.2
ora a
1985-03-04 13:42:38 +00:00
jp {label,1f}
1985-01-17 14:31:34 +00:00
mvi %b.1,{const1,255}
1: yields %b
1985-03-04 13:42:38 +00:00
with hl_or_de
uses areg=%1.2
1985-01-17 14:31:34 +00:00
gen move {const1,0},%1.1
ora a
1985-03-04 13:42:38 +00:00
jp {label,1f}
1985-01-17 14:31:34 +00:00
mvi %1.1,{const1,255}
1: yields %1
pat loc loc cii $1==1 && $2==4
with reg
uses hlreg
gen move %1,l yields hl
leaving loc $1 loc $2 cii
with hlreg
uses dereg, areg
gen move {const1,0},%1.1
1985-01-17 14:31:34 +00:00
move l,a
ora a
1985-03-04 13:42:38 +00:00
jp {label,1f}
1985-01-17 14:31:34 +00:00
mvi h,{const1,255}
1:
mov e,h
mov d,h yields de hl
pat cii
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".cii"}
pat loc loc ciu leaving loc $1 loc $2 cuu
1985-03-04 13:42:38 +00:00
pat loc loc cui leaving loc $1 loc $2 cuu
1985-01-17 14:31:34 +00:00
pat cui leaving cuu $1
pat ciu leaving cuu $1
pat loc loc cuu $1==$2
pat loc loc cuu $1==2 && $2==4
with src1or2 yields {const2,0} %1
1985-01-17 14:31:34 +00:00
pat loc loc cuu $1==4 && $1==2
with src1or2 src1or2 yields %1
1985-01-17 14:31:34 +00:00
pat loc loc cuu $1==1 && $2==2
with reg
1985-03-04 13:42:38 +00:00
uses reusing %1, hl_or_de
1985-01-17 14:31:34 +00:00
gen move %1,%a yields %a
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen move {const1,0},%1.1 yields %1
pat loc loc cuu $1==1 && $2==4
with reg
1985-03-04 13:42:38 +00:00
uses reusing %1, hl_or_de
1985-01-17 14:31:34 +00:00
gen move %1,%a yields {const2,0} %a
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
gen move {const1,0},%1.1 yields {const2,0} %1
pat cuu
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".cii"}
pat cfi
kills ALL
gen Call {label,".cfi"}
pat cif
kills ALL
gen Call {label,".cif"}
pat cuf
kills ALL
gen Call {label,".cuf"}
pat cff
kills ALL
gen Call {label,".cff"}
pat cfu
kills ALL
gen Call {label,".cfu"}
1985-01-17 14:31:34 +00:00
/*****************************************/
/* Group 9: Logical instructions */
/*****************************************/
pat and $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.2
ana %2.2
mov %2.2,a
mov a,%1.1
ana %2.1
mov %2.1,a yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
ana %2.2
mov %1.2,a
mov a,%1.1
ana %2.1
mov %1.1,a yields %1
1985-01-17 14:31:34 +00:00
pat and defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".and"}
pat and !defined($1)
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".and"}
pat ior $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.2
ora %2.2
mov %2.2,a
mov a,%1.1
ora %2.1
mov %2.1,a yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
ora %2.2
mov %1.2,a
mov a,%1.1
ora %2.1
mov %1.1,a yields %1
1985-01-17 14:31:34 +00:00
pat ior defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".ior"}
pat ior !defined($1)
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".ior"}
pat xor $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.2
xra %2.2
mov %2.2,a
mov a,%1.1
xra %2.1
mov %2.1,a yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
xra %2.2
mov %1.2,a
mov a,%1.1
xra %2.1
mov %1.1,a yields %1
1985-01-17 14:31:34 +00:00
pat xor defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".xor"}
pat xor !defined($1)
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".xor"}
pat com $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".com"}
pat com !defined($1)
with dereg
kills ALL
gen Call {label,".com"}
1985-01-17 14:31:34 +00:00
pat rol $1==2
with dereg hlreg
kills ALL
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,e
ani {const1,15}
1985-03-04 13:42:38 +00:00
jz {label,3f}
1985-01-17 14:31:34 +00:00
1:
dad hl
1985-03-04 13:42:38 +00:00
jnc {label,2f}
1985-01-17 14:31:34 +00:00
inr l
2:
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
3: yields hl
pat rol $1==4
with dereg
kills ALL
gen Call {label,".rol4"}
1985-01-17 14:31:34 +00:00
pat ror $1==2
with dereg hlreg
kills ALL
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,e
ani {const1,15}
1985-03-04 13:42:38 +00:00
jz {label,2f}
1985-01-17 14:31:34 +00:00
mov e,a
mov a,l
1:
rar.
mov a,h
rar.
mov h,a
mov a,l
rar.
mov l,a
dcr e
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
2: yields hl
pat ror $1==4
with dereg
kills ALL
gen Call {label,".ror4"}
1985-01-17 14:31:34 +00:00
/***********************************************/
/* Group 10: Set instructions */
/***********************************************/
pat inn $1==2
kills ALL
gen Call {label,".inn2"} yields de
1985-01-17 14:31:34 +00:00
pat inn defined($1)
kills ALL
uses dereg={const2,$1}
gen Call {label,".inn"} yields de
pat inn !defined($1)
with dereg
kills ALL
gen Call {label,".inn"} yields de
1985-01-17 14:31:34 +00:00
pat set $1==2
with dereg
kills ALL
gen Call {label,".set2"} yields de
1985-01-17 14:31:34 +00:00
pat set defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".set"}
pat set !defined($1)
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".set"}
/***********************************************/
/* Group 11: Array instructions */
/***********************************************/
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)==0 leaving adi 2
pat lae aar $2==2 && rom($1,3)==1 && rom($1,1)!=0 leaving adi 2 adp 0-rom($1,1)
pat lae aar $2==2 && rom($1,3)==2 && rom($1,1)==0
with hlreg
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
pat lae aar $2==2 && rom($1,3)==4 && rom($1,1)==0
with hlreg
gen dad hl
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
pat lae aar $2==2 && rom($1,3)==8 && rom($1,1)==0
with hlreg
gen dad hl
dad hl
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
pat lar $1==2
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".lar2"}
pat lar defined($1)
gen Call {label,"eunimpl"}
pat lar !defined($1)
with hl_or_de
kills ALL
uses areg
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
gen Call {label,".sar2"}
pat sar defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,"eunimpl"}
pat sar !defined($1)
with hl_or_de
kills ALL
uses areg
1985-01-17 14:31:34 +00:00
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
1985-01-17 14:31:34 +00:00
gen Call {label,".aar2"}
pat aar defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,"eunimpl"}
pat aar !defined($1)
with hl_or_de
kills ALL
uses areg
1985-01-17 14:31:34 +00:00
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 */
/***********************************************/
pat cmi $1==2 leaving sbi 2
pat cmi $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,1}
gen Call {label,".cmi4"} yields de
pat cmf $1==4
kills ALL
gen Call {label,".cmf4"}
pat cmf $1==8
kills ALL
gen Call {label,".cmf8"}
1985-03-18 10:00:30 +00:00
1985-01-17 14:31:34 +00:00
pat cmu $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.1
cmp %1.1
1985-03-04 13:42:38 +00:00
jz {label,2f}
jc {label,1f}
1985-01-17 14:31:34 +00:00
0:
lxi %2,{const2,1}
1985-03-04 13:42:38 +00:00
jmp {label,3f}
1985-01-17 14:31:34 +00:00
1:
lxi %2,{const2,0-1}
1985-03-04 13:42:38 +00:00
jmp {label,3f}
1985-01-17 14:31:34 +00:00
2:
mov a,%2.2
cmp %1.2
1985-03-04 13:42:38 +00:00
jc {label,1b}
jnz {label,0b}
1985-01-17 14:31:34 +00:00
lxi %2,{const2,0}
3: yields %2
pat cmu $1==4
kills ALL
1985-01-17 14:31:34 +00:00
uses areg={const1,0}
gen Call {label,".cmi4"} yields de
pat cms $1==2 leaving cmi 2
pat cms defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".cms"} yields de
pat cms !defined($1)
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".cms"} yields de
pat cmp leaving cmu 2
pat tlt
1985-03-04 13:42:38 +00:00
with hl_or_de
uses areg
1985-01-17 14:31:34 +00:00
gen mov a,%1.1
ral.
mvi a,{const1,0}
mov %1.1,a
adc a
mov %1.2,a yields %1
pat tle
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,1}, areg
1985-01-17 14:31:34 +00:00
gen xra a
add %1.1
1985-03-04 13:42:38 +00:00
jm {label,2f}
jnz {label,1f}
1985-01-17 14:31:34 +00:00
xra a
add %1.2
1985-03-04 13:42:38 +00:00
jz {label,2f}
1985-01-17 14:31:34 +00:00
1:
dcx %a
2: yields %a
pat teq
1985-03-04 13:42:38 +00:00
with hl_or_de
uses areg
1985-01-17 14:31:34 +00:00
gen mov a,%1.1
ora %1.2
move {const2,0},%1
1985-03-04 13:42:38 +00:00
jnz {label,1f}
1985-01-17 14:31:34 +00:00
inx %1
1: yields %1
pat tne
1985-03-04 13:42:38 +00:00
with hl_or_de
uses areg
1985-01-17 14:31:34 +00:00
gen mov a,%1.1
ora %1.2
move {const2,0},%1
1985-03-04 13:42:38 +00:00
jz {label,1f}
1985-01-17 14:31:34 +00:00
inx %1
1: yields %1
pat tge
1985-03-04 13:42:38 +00:00
with hl_or_de
uses areg
1985-01-17 14:31:34 +00:00
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
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,0}, areg
1985-01-17 14:31:34 +00:00
gen xra a
add %1.1
1985-03-04 13:42:38 +00:00
jm {label,2f}
jnz {label,1f}
1985-01-17 14:31:34 +00:00
xra a
add %1.2
1985-03-04 13:42:38 +00:00
jz {label,2f}
1985-01-17 14:31:34 +00:00
1:
inx %a
2: yields %a
pat loc cmi teq and $1>=0 && $1<=255 && $2==2 && $4==2
1985-03-04 13:42:38 +00:00
with exact areg hl_or_de
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jz {label,1f}
1985-01-17 14:31:34 +00:00
move {const2,0},%2
1: yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jz {label,2f}
1:
move {const2,0},%2
2: yields %2
1985-01-17 14:31:34 +00:00
pat loc cmi tne and $1>=0 && $1<=255 && $2==2 && $4==2
1985-03-04 13:42:38 +00:00
with exact areg hl_or_de
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
1985-01-17 14:31:34 +00:00
move {const2,0},%2
1: yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jnz {label,1f}
move {const2,0},%2
1: yields %2
1985-01-17 14:31:34 +00:00
pat loc cmi teq ior $1>=0 && $1<=255 && $2==2 && $4==2
1985-03-04 13:42:38 +00:00
with exact areg hl_or_de
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
move {const2,1},%2
1: yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jnz {label,1f}
move {const2,1},%2
1985-01-17 14:31:34 +00:00
1: yields %2
pat loc cmi tne ior $1>=0 && $1<=255 && $2==2 && $4==2
1985-03-04 13:42:38 +00:00
with exact areg hl_or_de
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jz {label,1f}
move {const2,1},%2
1985-01-17 14:31:34 +00:00
1: yields %2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de
uses areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jz {label,2f}
1:
move {const2,1},%2
2: yields %2
1985-01-17 14:31:34 +00:00
pat loc cmi teq $1>=0 && $1<=255 && $2==2
with exact areg
1985-03-04 13:42:38 +00:00
uses hl_or_de={const2,0}
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
inx %a
1: yields %a
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,0}, areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jnz {label,1f}
inx %a
1: yields %a
1985-01-17 14:31:34 +00:00
pat loc cmi tne $1>=0 && $1<=255 && $2==2
with exact areg
1985-03-04 13:42:38 +00:00
uses hl_or_de={const2,0}
1985-01-17 14:31:34 +00:00
gen cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jz {label,1f}
inx %a
1: yields %a
1985-03-04 13:42:38 +00:00
with hl_or_de
uses hl_or_de={const2,1}, areg
gen mov a,%1.2
cpi {const1,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
mov a,%1.1
ora a
1985-03-04 13:42:38 +00:00
jnz {label,1f}
dcx %a
1: yields %a
1985-01-17 14:31:34 +00:00
pat loc cmi $1>=0 && $1<=255 && $2==2
with exact areg
1985-03-04 13:42:38 +00:00
uses hl_or_de
gen sui {const1,$1}
1985-01-17 14:31:34 +00:00
mov %a.2,a
rar.
mov %a.1,a yields %a
with yields {const2,$1}
leaving cmi 2
pat loc cmi $1<0 && $2==2
with exact areg yields {const2,0-1}
with yields {const2,$1}
leaving cmi 2
/*******************************************/
/* Group 13: Branch instructions */
/*******************************************/
1985-03-18 10:00:30 +00:00
pat loc beq $1>=0 && $1<=255
with exact reg
uses reusing %1, areg=%1
gen cpi {const1,$1}
jz {label,$2}
with yields {const2,$1}
leaving beq $2
pat loc bne $1>=0 && $1<=255
with exact reg
uses reusing %1, areg=%1
gen cpi {const1,$1}
jnz {label,$2}
with yields {const2,$1}
leaving bne $2
1985-01-17 14:31:34 +00:00
pat bra
with STACK
gen jmp {label,$1}
pat blt
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.2
sub %1.2
mov a,%2.1
sbb %1.1
jm {label,$1}
pat ble
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.2
sub %2.2
mov a,%1.1
sbb %2.1
jp {label,$1}
pat beq
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.2
cmp %1.2
1985-03-04 13:42:38 +00:00
jnz {label,1f}
1985-01-17 14:31:34 +00:00
mov a,%2.1
cmp %1.1
jz {label,$1}
1:
pat bne
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.2
cmp %1.2
jnz {label,$1}
mov a,%2.1
cmp %1.1
jnz {label,$1}
pat bge
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%2.2
sub %1.2
mov a,%2.1
sbb %1.1
jp {label,$1}
pat bgt
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.2
sub %2.2
mov a,%1.1
sbb %2.1
jm {label,$1}
pat zlt
with STACK
gen pop psw
1985-03-04 13:42:38 +00:00
ora a
jm {label,$1}
with hl_or_de STACK
gen mov a,%1.1
ora a
jm {label,$1}
1985-01-17 14:31:34 +00:00
pat zle
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen xra a
add %1.1
jm {label,$1}
1985-03-04 13:42:38 +00:00
jnz {label,1f}
1985-01-17 14:31:34 +00:00
xra a
add %1.2
jz {label,$1}
1:
pat zeq
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.1
ora %1.2
jz {label,$1}
pat zne
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen mov a,%1.1
ora %1.2
jnz {label,$1}
pat zge
with STACK
gen pop psw
ral.
jnc {label,$1}
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
gen mov a,%1.1
ora a
jp {label,$1}
1985-01-17 14:31:34 +00:00
pat zgt
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
1985-01-17 14:31:34 +00:00
uses areg
gen xra a
add %1.1
1985-03-04 13:42:38 +00:00
jm {label,1f}
1985-01-17 14:31:34 +00:00
jnz {label,$1}
xra a
add %1.2
jnz {label,$1}
1:
pat lol zeq
with STACK
uses hlreg={const2,$1}, areg
1985-01-17 14:31:34 +00:00
gen dad lb
1985-03-04 13:42:38 +00:00
mov a,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
ora {m}
1985-01-17 14:31:34 +00:00
jz {label,$2}
pat lol zne
with STACK
uses hlreg={const2,$1}, areg
1985-01-17 14:31:34 +00:00
gen dad lb
1985-03-04 13:42:38 +00:00
mov a,{m}
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
ora {m}
1985-01-17 14:31:34 +00:00
jnz {label,$2}
pat ior zeq $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
uses areg
1985-01-17 14:31:34 +00:00
gen mov a,%1.1
ora %1.2
ora %2.1
ora %2.2
jz {label,$2}
pat ior zne $1==2
1985-03-04 13:42:38 +00:00
with hl_or_de hl_or_de STACK
uses areg
1985-01-17 14:31:34 +00:00
gen mov a,%1.1
ora %1.2
ora %2.1
ora %2.2
jnz {label,$2}
/*********************************************/
/* Group 14: Procedure call instructions */
/*********************************************/
pat cal
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,$1}
pat cai
with hlreg
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg
1985-03-04 13:42:38 +00:00
gen lxi de,{label,1f}
1985-01-17 14:31:34 +00:00
push de
pchl.
1:
pat lfr $1==2 yields de
pat lfr $1<=8
with STACK
uses areg={const1,$1/2}, hlreg={label,".fra"+$1}, dereg
1985-01-17 14:31:34 +00:00
gen 1:
dcx hl
1985-03-04 13:42:38 +00:00
mov d,{m}
1985-01-17 14:31:34 +00:00
dcx hl
1985-03-04 13:42:38 +00:00
mov e,{m}
1985-01-17 14:31:34 +00:00
push de
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
pat lfr ret $1==$2 leaving ret 0
pat ret $1==0
with STACK
uses hlreg
gen move lb,hl
sphl.
pop lb
ret.
pat ret $1==2
with dereg STACK
uses hlreg
gen move lb,hl
sphl.
pop lb
ret.
pat ret $1<=8
with STACK
uses areg={const1,$1/2}, hlreg={label,".fra"}, dereg
1985-01-17 14:31:34 +00:00
gen 1:
pop de
1985-03-04 13:42:38 +00:00
mov {m},e
1985-01-17 14:31:34 +00:00
inx hl
1985-03-04 13:42:38 +00:00
mov {m},d
1985-01-17 14:31:34 +00:00
inx hl
dcr a
1985-03-04 13:42:38 +00:00
jnz {label,1b}
1985-01-17 14:31:34 +00:00
move lb,hl
sphl.
pop lb
ret.
/******************************************/
/* Group 15: Miscellaneous */
/******************************************/
pat asp $1<=0-6
with STACK
uses hlreg={const2,$1}
gen dad sp
sphl.
pat asp $1==0-4
with STACK
gen dcx sp
dcx sp
dcx sp
dcx sp
pat asp $1==0-2
with STACK
gen dcx sp
dcx sp
pat asp $1==0 /* do nothing */
pat asp $1==2
with exact src1or2
with STACK
gen inx sp
inx sp
pat asp $1==4
with exact src1or2 leaving asp 2
with STACK
gen inx sp
inx sp
inx sp
inx sp
pat asp $1>=6
with exact src1or2 leaving asp $1-2
with STACK
uses hlreg={const2,$1}
gen dad sp
sphl.
pat ass $1==2
with hlreg STACK
gen dad sp
sphl.
pat blm
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".blm"}
pat bls
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".blm"}
pat csa
kills ALL
1985-01-17 14:31:34 +00:00
gen jmp {label,".csa"}
pat csb
kills ALL
1985-01-17 14:31:34 +00:00
gen jmp {label,".csb"}
pat dch leaving loi 2
pat dup $1==2
with src1or2 yields %1 %1
1985-01-17 14:31:34 +00:00
pat dup $1==4
with src1or2 src1or2 yields %2 %1 %2 %1
1985-01-17 14:31:34 +00:00
pat dup
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,$1}
gen Call {label,".dup"}
pat dus $1==2
with dereg
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".dup"}
pat exg $1==2
with src1or2 src1or2 yields %1 %2
1985-01-17 14:31:34 +00:00
pat exg defined($1)
kills ALL
1985-01-17 14:31:34 +00:00
uses dereg={const2,1}
gen Call {label,".exg"}
pat fil
1985-03-04 13:42:38 +00:00
uses hlreg={label,$1}
gen shld {label,"hol0"+4}
1985-01-17 14:31:34 +00:00
pat gto
with STACK
gen lhld {label,$1+2}
sphl.
lhld {label,$1+4}
move hl,lb
lhld {label,$1}
pchl.
pat lim
uses hlreg
1985-01-17 14:31:34 +00:00
gen lhld {label,".ignmask"} yields hl
pat lin
uses hlreg={const2,$1}
gen shld {label,"hol0"}
pat lni
uses hlreg
1985-01-17 14:31:34 +00:00
gen lhld {label,"hol0"}
inx hl
shld {label,"hol0"}
pat lor $1==0 yields lb
pat lor $1==1
with STACK
uses hlreg={const2,0}
gen dad sp yields hl
pat lor $1==2
uses hlreg
1985-01-17 14:31:34 +00:00
gen lhld {label,".reghp"} yields hl
pat lpb leaving adp SL
pat mon
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".mon"}
pat nop
kills ALL
#ifdef DEBUG
1985-01-17 14:31:34 +00:00
gen Call {label,".nop"}
#endif
1985-01-17 14:31:34 +00:00
pat rck
1985-03-04 13:42:38 +00:00
with hl_or_de STACK
1985-01-17 14:31:34 +00:00
pat rtt leaving ret 0
pat sig
with dereg
uses hlreg
1985-01-17 14:31:34 +00:00
gen lhld {label,".trapproc"}
xchg.
shld {label,".trapproc"} yields de
with STACK
uses hlreg
1985-01-17 14:31:34 +00:00
gen lhld {label,".trapproc"}
xthl.
shld {label,".trapproc"}
pat sim
with hlreg
gen shld {label,".ignmask"}
pat str $1==0
with localbase
pat str $1==1
with hlreg
gen sphl.
1985-01-17 14:31:34 +00:00
pat str $1==2
with hlreg
gen shld {label,".reghp"}
pat trp
kills ALL
1985-01-17 14:31:34 +00:00
gen Call {label,".trp"}