1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065 |
- /************************************************************/
- /************************************************************/
- /******* ******/
- /******* 8 0 8 0 B A C K E N D T A B L E ******/
- /******* ******/
- /************************************************************/
- /************************************************************/
- rcsid = "$Id$"
- 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
- uses hlreg={const2,$1}, dereg
- gen dad lb
- mov e,{m}
- inx hl
- mov d,{m} yields de
- pat loe
- uses hlreg
- gen lhld {label,$1} yields hl
- pat lil
- uses hlreg={const2,$1}, dereg
- gen dad lb
- mov e,{m}
- inx hl
- mov h,{m}
- mov l,e
- mov e,{m}
- inx hl
- mov d,{m} yields de
- 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
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".loi"}
- pat los $1==2
- with dereg
- kills ALL
- gen Call {label,".loi"}
- pat ldl
- with STACK
- uses dereg, hlreg={const2,$1+3}
- gen dad lb
- mov d,{m}
- dcx hl
- mov e,{m}
- dcx hl
- push de
- mov d,{m}
- dcx hl
- mov e,{m} yields de
- 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
- 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
- kills ALL
- 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
- 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}
- pat sti
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".sti"}
- pat sts $1==2
- with dereg
- kills ALL
- gen Call {label,".sti"}
- pat sdl
- with dereg
- kills ALL
- uses hlreg={const2,$1}
- gen dad lb
- mov {m},e
- inx hl
- mov {m},d
- inx hl
- pop de
- mov {m},e
- inx hl
- mov {m},d
- pat sde
- with hlreg
- kills ALL
- 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}
- pat sdf
- with hl_or_de
- kills ALL
- uses hl_or_de={const2,$1}
- gen dad de
- pop de
- mov {m},e
- inx hl
- mov {m},d
- inx hl
- pop de
- mov {m},e
- inx hl
- mov {m},d
- /****************************************/
- /* Group 3: Integer arithmetic */
- /****************************************/
- 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
- kills ALL
- 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
- kills ALL
- gen Call {label,".sbi4"}
- pat mli $1==2
- kills ALL
- gen Call {label,".mli2"} yields de
- pat mli $1==4
- kills ALL
- gen Call {label,".mli4"}
- pat dvi $1==2
- kills ALL
- uses areg={const1,129}
- gen Call {label,".dvi2"} yields de
- pat dvi $1==4
- kills ALL
- uses areg={const1,129}
- gen Call {label,".dvi4"}
- pat rmi $1==2
- kills ALL
- uses areg={const1,128}
- gen Call {label,".dvi2"} yields de
- pat rmi $1==4
- kills ALL
- 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
- kills ALL
- 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
-
- pat sli $1==2
- kills ALL
- gen Call {label,".sli2"} yields de
- pat sli $1==4
- kills ALL
- gen Call {label,".sli4"}
- pat sri $1==2
- kills ALL
- uses areg={const1,1}
- gen Call {label,".sri2"} yields de
- pat sri $1==4
- kills ALL
- 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"}
- pat dvu $1==2
- kills ALL
- uses areg={const1,1}
- gen Call {label,".dvi2"} yields de
- pat dvu $1==4
- kills ALL
- uses areg={const1,1}
- gen Call {label,".dvi4"}
- pat rmu $1==2
- kills ALL
- uses areg={const1,0}
- gen Call {label,".dvi2"} yields de
- pat rmu $1==4
- kills ALL
- 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
-
- pat sru $1==2
- kills ALL
- uses areg={const1,0}
- gen Call {label,".sri2"} yields de
- pat sru $1==4
- kills ALL
- uses areg={const1,0}
- gen Call {label,".sri4"}
- /********************************************/
- /* Group 5: Floating point arithmetic */
- /********************************************/
- 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"}
- 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"}
- /********************************************/
- /* 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 $1==4
- kills ALL
- gen Call {label,".zrf4"}
- pat zrf $1==8
- kills ALL
- gen Call {label,".zrf8"}
- pat zer $1==2 yields {const2,0}
- 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}
- 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}
- /*****************************************/
- /* 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
- kills ALL
- 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
- kills ALL
- 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"}
- /*****************************************/
- /* 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)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".and"}
- pat and !defined($1)
- with dereg
- kills ALL
- 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)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".ior"}
- pat ior !defined($1)
- with dereg
- kills ALL
- 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)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".xor"}
- pat xor !defined($1)
- with dereg
- kills ALL
- 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)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".com"}
- pat com !defined($1)
- with dereg
- kills ALL
- gen Call {label,".com"}
- pat rol $1==2
- with dereg hlreg
- kills ALL
- 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
- 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
- pat ror $1==4
- with dereg
- kills ALL
- gen Call {label,".ror4"}
- /***********************************************/
- /* Group 10: Set instructions */
- /***********************************************/
- pat inn $1==2
- kills ALL
- gen Call {label,".inn2"} yields de
- 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
- pat set $1==2
- with dereg
- kills ALL
- gen Call {label,".set2"} yields de
- pat set defined($1)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".set"}
- pat set !defined($1)
- with dereg
- kills ALL
- 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
- gen Call {label,".lar2"}
- pat lar defined($1)
- 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"}
- pat sar $1==2
- kills ALL
- gen Call {label,".sar2"}
- pat sar defined($1)
- 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"}
- pat aar $1==2
- kills ALL
- gen Call {label,".aar2"}
- pat aar defined($1)
- 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"}
- /***********************************************/
- /* Group 12: Compare instructions */
- /***********************************************/
- pat cmi $1==2 leaving sbi 2
- pat cmi $1==4
- kills ALL
- 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"}
-
- 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
- kills ALL
- uses areg={const1,0}
- gen Call {label,".cmi4"} yields de
- pat cms $1==2 leaving cmi 2
- pat cms defined($1)
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".cms"} yields de
- pat cms !defined($1)
- with dereg
- kills ALL
- 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
- kills ALL
- gen Call {label,$1}
- pat cai
- with hlreg
- kills ALL
- 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
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".blm"}
- pat bls
- with dereg
- kills ALL
- gen Call {label,".blm"}
- pat csa
- kills ALL
- gen jmp {label,".csa"}
- pat csb
- kills ALL
- 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
- kills ALL
- uses dereg={const2,$1}
- gen Call {label,".dup"}
- pat dus $1==2
- with dereg
- kills ALL
- gen Call {label,".dup"}
- pat exg $1==2
- with src1or2 src1or2 yields %1 %2
- pat exg defined($1)
- kills ALL
- 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
- kills ALL
- gen Call {label,".mon"}
- pat nop
- kills ALL
- #ifdef DEBUG
- gen Call {label,".nop"}
- #endif
- 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
- kills ALL
- gen Call {label,".trp"}
|