123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974 |
- /************************************************************/
- /************************************************************/
- /******* ******/
- /******* 8 0 8 0 B A C K E N D T A B L E ******/
- /******* ******/
- /************************************************************/
- /************************************************************/
- rcsid = "$Header$"
- 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 */
- hl_or_de /* de- or hl-register-pair */
- localbase
- stackpointer
- psword
- REGISTERS
- a :areg,reg.
- b,c :lbreg.
- d,e,h,l :reg.
- lb("b")=b+c :regpair, localbase, regind.
- 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
- const1 = { INT num; } 1 num.
- const2 = { INT num; } 2 num.
- label = { ADDR off; } 2 off.
- m = { } 2 cost(0,3) "m".
- SETS
- 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.
- INSTRUCTIONS
- /* 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).
- /* 'call' is a reserved word */
- /* 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).
-
- MOVES
- from reg to reg
- gen mov %2,%1
- from const1 %num==0 to areg
- gen xra a
- from const1 to reg
- gen mvi %2,%1
- from immediate to b_d_h_sp
- gen lxi %2,%1
- from reg to regpair
- 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
- TESTS
- to test areg /* dummy test, never used */
- gen ora a
- STACKINGRULES
- 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
- gen push hl
- move %1,hl
- xthl.
- COERCIONS
- from STACK
- uses regpair
- gen pop %a yields %a
- from STACK
- uses hl_or_de
- gen pop %a yields %a.2
- from STACK
- uses areg
- gen dcx sp
- pop psw
- inx sp yields a
- from immediate
- uses regpair
- gen move %1,%a yields %a
- from hl_or_de
- uses hl_or_de
- gen xchg. yields %a
- from regpair
- 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
- from hl_or_de yields %1.2
- from const2
- uses hl_or_de
- gen move %1,%a yields %a.2
- from hl_or_de
- uses areg
- gen move %1.2,a yields a
- PATTERNS
- /*********************************************/
- /* Group 1: Load instructions */
- /*********************************************/
- pat loc yields {const2,$1}
- pat ldc yields {const2,highw($1)}
- {const2,loww($1)}
- pat lol lol $1==$2
- uses hlreg={const2,$1}, dereg
- gen dad lb
- mov e,{m}
- inx hl
- mov d,{m} yields de de
- pat lol
- uses hlreg={const2,$1}, dereg
- gen dad lb
- mov e,{m}
- inx hl
- mov d,{m} yields de
- pat loe loe $1==$2
- uses hlreg
- gen lhld {label,$1} yields hl hl
- pat loe
- uses hlreg
- gen lhld {label,$1} yields hl
- pat lil lil $1==$2
- 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 de
- 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
- 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
- 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
- mov e,{m}
- inx hl
- mov d,{m} yields de
- pat lxl $1>1 && $1<256
- uses dereg, areg={const1,$1}, hlreg
- gen move lb,de
- 1:
- lxi hl,{const2,SL}
- dad de
- mov e,{m}
- inx hl
- mov d,{m}
- dcr a
- jnz {label,1b} yields de
- 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
- 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
- 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
- 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
- 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
- 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}
- pat loi $1>=512
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".loi"}
- pat los $1==2
- with dereg STACK
- 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
- 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
- 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
- pat lpi
- uses hl_or_de={label,$1} yields %a
- /******************************************/
- /* 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
- mov {m},e
- inx hl
- mov {m},d
- 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
- mov a,{m}
- inx hl
- mov h,{m}
- mov l,a
- mov {m},e
- inx hl
- mov {m},d
- 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
- with STACK
- 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
- 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:
- 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 stf
- with hl_or_de STACK
- uses hl_or_de={const2,$1}
- gen dad de
- pop de
- mov {m},e
- inx hl
- mov {m},d
- pat sti $1==1
- with label areg
- gen sta %1
- with dereg areg
- gen stax de
- with hlreg reg
- gen mov {m},%2
- pat sti $1==2
- with label hlreg
- gen shld %1
- with hlreg dereg
- gen mov {m},e
- inx %1
- mov {m},d
- with dereg hlreg
- gen xchg.
- mov {m},e
- inx %2
- 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 STACK
- gen mov {m},e
- inx hl
- mov {m},d
- inx hl
- pop de
- mov {m},e
- inx hl
- mov {m},d
- pat sti $1<512
- with hlreg STACK
- 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}
- pat sti
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".sti"}
- pat sts $1==2
- with dereg STACK
- gen Call {label,".sti"}
- pat sdl
- with dereg STACK
- 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
- pat sde
- with hlreg STACK
- gen shld {label,$1}
- pop hl
- shld {label,$1+2}
- with hlreg dereg STACK
- gen shld {label,$1}
- xchg.
- shld {label,$1+2}
- with dereg hlreg STACK
- gen shld {label,$1+2}
- xchg.
- shld {label,$1}
- pat sdf
- with hl_or_de STACK
- 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 */
- /****************************************/
- pat adi $1==2
- with hlreg dereg
- gen dad de yields hl
- with dereg hlreg
- gen dad de yields hl
- with hlreg hlreg
- gen dad hl yields hl
- with dereg dereg
- gen xchg.
- dad hl yields hl
- pat adi $1==4
- with STACK
- gen Call {label,".adi4"}
- pat sbi $1==2
- with hl_or_de hl_or_de
- uses areg
- gen mov a,%2.2
- sub %1.2
- mov %1.2,a
- mov a,%2.1
- sbb %1.1
- mov %1.1,a yields %1
- with hl_or_de hl_or_de
- uses areg
- gen mov a,%2.2
- sub %1.2
- mov %2.2,a
- mov a,%2.1
- sbb %1.1
- mov %2.1,a yields %2
- pat sbi $1==4
- with STACK
- gen Call {label,".sbi4"}
- pat mli $1==2
- with STACK
- gen Call {label,".mli2"} yields de
- pat mli $1==4
- with STACK
- gen Call {label,".mli4"}
- pat dvi $1==2
- with STACK
- uses areg={const1,129}
- gen Call {label,".dvi2"} yields de
- pat dvi $1==4
- with STACK
- uses areg={const1,129}
- gen Call {label,".dvi4"}
- pat rmi $1==2
- with STACK
- uses areg={const1,128}
- gen Call {label,".dvi2"} yields de
- pat rmi $1==4
- with STACK
- uses areg={const1,128}
- gen 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
- pat ngi $1==4
- with STACK
- gen Call {label,".ngi4"}
- pat sli $1==2
- with STACK
- gen Call {label,".sli2"} yields de
- pat sli $1==4
- with STACK
- gen Call {label,".sli4"}
- pat sri $1==2
- with STACK
- uses areg={const1,1}
- gen Call {label,".sri2"} yields de
- pat sri $1==4
- with STACK
- 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
- with STACK
- gen Call {label,".mlu2"} yields de
- pat mlu $1==4
- with STACK
- gen Call {label,".mli4"}
- pat dvu $1==2
- with STACK
- uses areg={const1,1}
- gen Call {label,".dvi2"} yields de
- pat dvu $1==4
- with STACK
- uses areg={const1,1}
- gen Call {label,".dvi4"}
- pat rmu $1==2
- with STACK
- uses areg={const1,0}
- gen Call {label,".dvi2"} yields de
- pat rmu $1==4
- with STACK
- uses areg={const1,0}
- gen Call {label,".dvi4"}
- pat slu leaving sli $1
- pat sru $1==2
- with STACK
- uses areg={const1,0}
- gen Call {label,".sri2"} yields de
- pat sru $1==4
- with STACK
- uses areg={const1,0}
- gen Call {label,".sri4"}
- /********************************************/
- /* Group 5: Floating point arithmetic */
- /********************************************/
- /* Floating points are not supported */
- pat adf gen Call {label,"eunimpl"}
- pat sbf gen Call {label,"eunimpl"}
- pat mlf gen Call {label,"eunimpl"}
- pat dvf gen Call {label,"eunimpl"}
- pat ngf gen Call {label,"eunimpl"}
- pat fif gen Call {label,"eunimpl"}
- pat fef gen Call {label,"eunimpl"}
- /********************************************/
- /* Group 6: Pointer arithmetic */
- /********************************************/
- 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-2
- with hl_or_de
- gen dcx %1
- dcx %1 yields %1
- pat adp
- with hl_or_de
- uses hl_or_de={const2,$1}
- 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
- with hl_or_de
- gen inx %1 yields %1
- pat inl
- uses hlreg={const2,$1}
- gen dad lb
- inr {m}
- jnz {label,1f}
- inx hl
- inr {m}
- 1:
- pat ine
- uses hlreg={label,$1}
- gen inr {m}
- jnz {label,1f}
- inx hl
- inr {m}
- 1:
- pat dec
- with hl_or_de
- gen dcx %1 yields %1
- pat del
- uses hlreg={const2,$1}, dereg
- gen dad lb
- mov e,{m}
- inx hl
- mov d,{m}
- dcx de
- mov {m},d
- dcx hl
- mov {m},e
- 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
- mov {m},a
- inx hl
- mov {m},a
- pat zre
- uses hlreg={const2,0}
- gen shld {label,$1}
- pat zrf gen Call {label,"eunimpl"}
- pat zer $1==2 yields {const2,0}
- pat zer $1==4 yields {const2,0} {const2,0}
- pat zer $1<511
- with STACK
- uses reg={const1,$1/2}, hl_or_de={const2,0}
- gen 1:
- push %b
- dcr %a
- jnz {label,1b}
- pat zer
- with STACK
- 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}
- /*****************************************/
- /* 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={const2,0}, areg
- gen mov a,%1.1
- ora a
- jp {label,1f}
- lxi %a,{const2,0-1}
- 1: yields %a %1
- pat loc loc cii $1==4 && $2==2
- with hl_or_de hl_or_de yields %1
- pat loc loc cii $1==1 && $2==2
- with reg
- uses reusing %1, areg=%1, hl_or_de
- gen move {const1,0},%b.1
- move a,%b.2
- ora a
- jp {label,1f}
- mvi %b.1,{const1,255}
- 1: yields %b
- with hl_or_de
- uses areg=%1.2
- gen move {const1,0},%1.1
- ora a
- jp {label,1f}
- 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
- move l,a
- ora a
- jp {label,1f}
- mvi h,{const1,255}
- 1:
- mov e,h
- mov d,h yields de hl
- pat cii
- with STACK
- uses areg={const1,1}
- gen Call {label,".cii"}
- pat loc loc ciu leaving loc $1 loc $2 cuu
- pat loc loc cui leaving loc $1 loc $2 cuu
- 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
- pat loc loc cuu $1==4 && $1==2
- 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
- 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
- pat cuu
- with STACK
- uses areg={const1,0}
- gen Call {label,".cii"}
- pat cfi gen Call {label,"eunimpl"}
- pat cif gen Call {label,"eunimpl"}
- pat cuf gen Call {label,"eunimpl"}
- pat cff gen Call {label,"eunimpl"}
- pat cfu gen Call {label,"eunimpl"}
-
- /*****************************************/
- /* Group 9: Logical instructions */
- /*****************************************/
- pat and $1==2
- with hl_or_de hl_or_de
- 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
- 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
- pat and defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".and"}
- pat and !defined($1)
- with dereg STACK
- gen Call {label,".and"}
- pat ior $1==2
- with hl_or_de hl_or_de
- 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
- 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
- pat ior defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".ior"}
- pat ior !defined($1)
- with dereg STACK
- gen Call {label,".ior"}
- pat xor $1==2
- with hl_or_de hl_or_de
- 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
- 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
- pat xor defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".xor"}
- pat xor !defined($1)
- with dereg STACK
- 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
- pat com defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".com"}
- pat com !defined($1)
- with dereg STACK
- gen Call {label,".com"}
- pat rol $1==2
- with dereg hlreg STACK
- uses areg
- gen mov a,e
- ani {const1,15}
- jz {label,3f}
- 1:
- dad hl
- jnc {label,2f}
- inr l
- 2:
- dcr a
- jnz {label,1b}
- 3: yields hl
- pat rol $1==4
- with dereg STACK
- gen Call {label,".rol4"}
- pat ror $1==2
- with dereg hlreg STACK
- 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
- pat ror $1==4
- with dereg STACK
- gen Call {label,".ror4"}
- /***********************************************/
- /* Group 10: Set instructions */
- /***********************************************/
- pat inn $1==2
- with STACK
- gen Call {label,".inn2"} yields de
- pat inn defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".inn"} yields de
- pat inn !defined($1)
- with dereg STACK
- gen Call {label,".inn"} yields de
- pat set $1==2
- with dereg STACK
- gen Call {label,".set2"} yields de
- pat set defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".set"}
- pat set !defined($1)
- with dereg STACK
- 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
- with STACK
- gen Call {label,".lar2"}
- pat lar defined($1)
- gen Call {label,"eunimpl"}
- pat lar !defined($1)
- with hl_or_de STACK
- 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
- with STACK
- gen Call {label,".sar2"}
- pat sar defined($1)
- gen Call {label,"eunimpl"}
- pat sar !defined($1)
- with hl_or_de STACK
- 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
- with STACK
- gen Call {label,".aar2"}
- pat aar defined($1)
- gen Call {label,"eunimpl"}
- pat aar !defined($1)
- with hl_or_de STACK
- 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 */
- /***********************************************/
- pat cmi $1==2 leaving sbi 2
- pat cmi $1==4
- with STACK
- uses areg={const1,1}
- gen Call {label,".cmi4"} yields de
- pat cmf gen Call {label,"eunimpl"}
-
- 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
- pat cmu $1==4
- with STACK
- uses areg={const1,0}
- gen Call {label,".cmi4"} yields de
- pat cms $1==2 leaving cmi 2
- pat cms defined($1)
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".cms"} yields de
- pat cms !defined($1)
- with dereg STACK
- gen Call {label,".cms"} yields de
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- pat loc cmi teq ior $1>=0 && $1<=255 && $2==2 && $4==2
- with exact areg hl_or_de
- gen cpi {const1,$1}
- jnz {label,1f}
- move {const2,1},%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,1},%2
- 1: yields %2
- pat loc cmi tne ior $1>=0 && $1<=255 && $2==2 && $4==2
- with exact areg hl_or_de
- gen cpi {const1,$1}
- jz {label,1f}
- move {const2,1},%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,1},%2
- 2: yields %2
- pat loc cmi teq $1>=0 && $1<=255 && $2==2
- with exact areg
- uses hl_or_de={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
- gen mov a,%1.2
- cpi {const1,$1}
- jnz {label,1f}
- mov a,%1.1
- ora a
- jnz {label,1f}
- inx %a
- 1: yields %a
- pat loc cmi tne $1>=0 && $1<=255 && $2==2
- with exact areg
- uses hl_or_de={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
- gen mov a,%1.2
- cpi {const1,$1}
- jnz {label,1f}
- mov a,%1.1
- ora a
- jnz {label,1f}
- dcx %a
- 1: yields %a
- pat loc cmi $1>=0 && $1<=255 && $2==2
- with exact areg
- uses hl_or_de
- gen sui {const1,$1}
- 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 */
- /*******************************************/
- 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
-
- pat bra
- with STACK
- gen jmp {label,$1}
- pat blt
- with hl_or_de hl_or_de STACK
- uses areg
- gen mov a,%2.2
- sub %1.2
- mov a,%2.1
- sbb %1.1
- jm {label,$1}
- pat ble
- with hl_or_de hl_or_de STACK
- uses areg
- gen mov a,%1.2
- sub %2.2
- mov a,%1.1
- sbb %2.1
- jp {label,$1}
- pat beq
- with hl_or_de hl_or_de STACK
- uses areg
- gen mov a,%2.2
- cmp %1.2
- jnz {label,1f}
- mov a,%2.1
- cmp %1.1
- jz {label,$1}
- 1:
- pat bne
- with hl_or_de hl_or_de STACK
- 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
- with hl_or_de hl_or_de STACK
- uses areg
- gen mov a,%2.2
- sub %1.2
- mov a,%2.1
- sbb %1.1
- jp {label,$1}
- pat bgt
- with hl_or_de hl_or_de STACK
- 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
- ora a
- jm {label,$1}
- with hl_or_de STACK
- gen mov a,%1.1
- ora a
- jm {label,$1}
- pat zle
- with hl_or_de STACK
- uses areg
- gen xra a
- add %1.1
- jm {label,$1}
- jnz {label,1f}
- xra a
- add %1.2
- jz {label,$1}
- 1:
- pat zeq
- with hl_or_de STACK
- uses areg
- gen mov a,%1.1
- ora %1.2
- jz {label,$1}
- pat zne
- with hl_or_de 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 hl_or_de STACK
- gen mov a,%1.1
- ora a
- jp {label,$1}
- pat zgt
- with hl_or_de STACK
- uses areg
- gen xra a
- add %1.1
- jm {label,1f}
- jnz {label,$1}
- xra a
- add %1.2
- jnz {label,$1}
- 1:
- pat lol zeq
- with STACK
- uses hlreg={const2,$1}, areg
- gen dad lb
- mov a,{m}
- inx hl
- ora {m}
- jz {label,$2}
- pat lol zne
- with STACK
- uses hlreg={const2,$1}, areg
- gen dad lb
- mov a,{m}
- inx hl
- ora {m}
- 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}
- 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}
- /*********************************************/
- /* Group 14: Procedure call instructions */
- /*********************************************/
- pat cal
- with STACK
- gen Call {label,$1}
- pat cai
- with hlreg STACK
- uses dereg
- gen lxi de,{label,1f}
- 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
- gen 1:
- dcx hl
- mov d,{m}
- dcx hl
- mov e,{m}
- push de
- dcr a
- jnz {label,1b}
- 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
- gen 1:
- pop de
- mov {m},e
- inx hl
- mov {m},d
- inx hl
- dcr a
- jnz {label,1b}
- 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
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".blm"}
- pat bls
- with dereg STACK
- gen Call {label,".blm"}
- pat csa
- with STACK
- gen jmp {label,".csa"}
- pat csb
- with STACK
- gen jmp {label,".csb"}
- pat dch leaving loi 2
- pat dup $1==2
- with src1or2 yields %1 %1
- pat dup $1==4
- with src1or2 src1or2 yields %2 %1 %2 %1
- pat dup
- with STACK
- uses dereg={const2,$1}
- gen Call {label,".dup"}
- pat dus $1==2
- with dereg STACK
- gen Call {label,".dup"}
- pat exg $1==2
- with src1or2 src1or2 yields %1 %2
- pat exg defined($1)
- with STACK
- uses dereg={const2,1}
- gen Call {label,".exg"}
- pat fil
- uses hlreg={label,$1}
- gen shld {label,"hol0"+4}
- 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
- gen lhld {label,".ignmask"} yields hl
- pat lin
- uses hlreg={const2,$1}
- gen shld {label,"hol0"}
- pat lni
- uses hlreg
- 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
- gen lhld {label,".reghp"} yields hl
- pat lpb leaving adp SL
- pat mon
- with STACK
- gen Call {label,".mon"}
- pat nop
- with STACK
- gen Call {label,".nop"}
- pat rck
- with hl_or_de STACK
- pat rtt leaving ret 0
- pat sig
- with dereg
- uses hlreg
- gen lhld {label,".trapproc"}
- xchg.
- shld {label,".trapproc"} yields de
- with STACK
- uses hlreg
- 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.
- pat str $1==2
- with hlreg
- gen shld {label,".reghp"}
- pat trp
- with STACK
- gen Call {label,".trp"}
|