1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450 |
- "$Id$"
- /********************************************************************
- **** ****
- **** Z 8 0 B A C K E N D T A B L E S ****
- **** ****
- ********************************************************************/
- /*
- * INTEGER SIZE: 16 bits
- * POINTER SIZE: 16 bits
- */
- /* We store LB in the iy index-register, because this results in the
- * cheapest addressing schemes for instruction like lol and stl.
- * For a lol with an argument that is too low (< 0-128) or too high
- * (>= 127) there is an overhead, because the offset cannot be
- * expressed in 8 bits. In these cases we copy the LB to the hl-register,
- * compute the required address and use register indirect mode to do
- * the load. These cases occur rarely (about 11.5 % in C and 5.5 %
- * in Pascal.
- */
- EM_WSIZE = 2
- EM_PSIZE = 2
- EM_BSIZE = 4
- /**************************
- ** R E G I S T E R S **
- **************************/
- REGISTERS:
- AA = ("a",1) REG1, AREG.
- BB = ("b",1) REG1.
- CC = ("c",1) REG1.
- DD = ("d",1) REG1.
- EE = ("e",1) REG1.
- HH = ("h",1) REG1.
- LL = ("l",1) REG1.
- BC = ("bc",2,BB,CC) REG, GEN_REG, BC_REG, ANY_REG.
- DE = ("de",2,DD,EE) REG, GEN_REG, DE_REG, ANY_REG.
- HL = ("hl",2,HH,LL) GEN_REG, HL_REG, ANY_REG.
- LB = ("iy",2) LOCALBASE.
- IX = ("ix",2) INDEXREG, IX_REG, ANY_REG.
- pseudo0 = ("",2,BC,DE).
- pseudo1 = ("",2,HL,IX).
- pseudo2 = ("",2,pseudo0,pseudo1).
- pseudo3 = ("",2,pseudo2,AA) ALL_REG.
- /*****************
- ** T O K E N S **
- *****************/
- TOKENS:
- IMMEDIATE1 = {INT off;} 1 "%[off]"
- IMMEDIATE = {INT off;} 2 "%[off]"
- IREG1 = {REGISTER reg;} 1 "(%[reg])"
- INDEXED = {REGISTER reg;
- INT off; } 1 "(%[reg]+%[off])"
- EXTENDED = {STRING off; } 2 "(%[off])"
- LOCAL_ADDR = {INT off; } 2
- EXTENDED_ADDR = {STRING off; } 2 "%[off]"
- /*************************************
- ** T O K E N E X P R E S S I O N S **
- *************************************/
- TOKENEXPRESSIONS:
- ANYTOK = IMMEDIATE + EXTENDED
- ANY1 = REG1 + IMMEDIATE1 + IREG1 + INDEXED
- ANY_ADDR = EXTENDED_ADDR + LOCAL_ADDR
- ANY = ANYTOK + ANY_REG + ANY_ADDR
- MEM_ALL = ANY - ANY_REG
- REG_SCR = REG * SCRATCH
- ANY_REG_SCR = ANY_REG * SCRATCH
- GEN_REG_SCR = GEN_REG * SCRATCH
- HL_REG_SCR = HL_REG * SCRATCH
- BC_REG_SCR = BC_REG * SCRATCH
- DE_REG_SCR = DE_REG * SCRATCH
- IX_REG_SCR = IX_REG * SCRATCH
- /*************
- ** C O D E **
- *************/
- CODE:
- /* G R O U P I : L O A D S */
- loc | | | {IMMEDIATE,$1} | |
- ldc | | | {IMMEDIATE,highw(1)} {IMMEDIATE,loww(1)} | |
- lol sfit($1,8) | | allocate(REG)
- move({INDEXED,LB,$1} , %[a.2] )
- move({INDEXED,LB,$1+1} , %[a.1] ) | %[a] | |
- lol | | allocate(HL_REG,REG)
- "push iy"
- "pop %[b]"
- move({IMMEDIATE,$1} , %[a] )
- "add hl,%[b]"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- erase(HL)
- erase(%[a]) | %[b] | |
- ldl $1<126 && $1>0-128 | | allocate(REG,REG)
- move({INDEXED,LB,$1} , %[a.2])
- move({INDEXED,LB,$1+1},%[a.1])
- move({INDEXED,LB,$1+2},%[b.2])
- move({INDEXED,LB,$1+3},%[b.1]) | %[b] %[a] | |
- ldl | |
- remove(ALL)
- allocate(BC_REG,DE_REG,HL_REG={IMMEDIATE,$1})
- "push iy"
- "pop bc"
- "add hl,bc"
- "ld e,(hl)"
- "inc hl"
- "ld d,(hl)"
- "inc hl"
- "ld c,(hl)"
- "inc hl"
- "ld b,(hl)"
- | BC DE | |
- loe | | | {EXTENDED,$1} | |
- lde | | | {EXTENDED,$1+"+2"} {EXTENDED,$1} | |
- lil sfit($1,8) | | allocate(HL_REG,REG)
- move({INDEXED,LB,$1} , %[a.2])
- move({INDEXED,LB,$1+1} , %[a.1])
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- erase(HL)
- erase(%[a]) | %[b] | |
- lil | | allocate(HL_REG = {IMMEDIATE,$1} , REG)
- "push iy"
- "pop %[b]"
- "add hl,%[b]"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- "ld h,%[b.1]"
- "ld l,%[b.2]"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- erase(HL)
- erase(%[a]) | %[b] | |
- lof | HL_REG_SCR | allocate(REG = {IMMEDIATE,$1} )
- "add hl,%[a]"
- "ld %[a.2],(hl)"
- "inc hl"
- "ld %[a.1],(hl)"
- erase(HL)
- erase(%[a]) | %[a] | |
- ... | REG_SCR | allocate(HL_REG = {IMMEDIATE,$1} )
- "add hl,%[1]"
- "ld %[1.2],(hl)"
- "inc hl"
- "ld %[1.1],(hl)"
- erase(HL)
- erase(%[1]) | %[1] | |
- ldf | HL_REG_SCR | allocate(REG = {IMMEDIATE,$1} , REG)
- "add hl,%[a]"
- "ld %[a.2],(hl)"
- "inc hl"
- "ld %[a.1],(hl)"
- "inc hl"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- erase(HL)
- erase(%[a]) | %[b] %[a] | |
- ... | REG_SCR | allocate(HL_REG = {IMMEDIATE,$1} , REG)
- "add hl,%[1]"
- "ld %[1.2],(hl)"
- "inc hl"
- "ld %[1.1],(hl)"
- "inc hl"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- erase(HL)
- erase(%[1]) | %[b] %[1] | |
- lal | | remove(ALL)
- allocate(HL_REG, REG = {IMMEDIATE,$1} )
- "push iy"
- "pop hl"
- "add hl,%[b]"
- erase(%[a]) | %[a] | |
- lae | | | {EXTENDED_ADDR,$1} | |
- lxl $1 == 0 | | remove(ALL)
- "push iy"
- | | |
- lxl | | remove(ALL)
- allocate(AREG = {IMMEDIATE1,$1} ,
- HL_REG,BC_REG)
- "push iy"
- "pop %[c]"
- "1:"
- "ld hl,4"
- "add hl,%[c]"
- "ld %[c.2],(hl)"
- "inc hl"
- "ld %[c.1],(hl)"
- "dec a"
- "jr nz,1b"
- "push %[c]"
- erase(AA) | | |
- lxa $1 == 0 | | | | lxl $1 adp 4 |
- lxa $1 == 1 | | remove(ALL)
- allocate(HL_REG,BC_REG)
- "ld %[b],4"
- "push iy"
- "pop hl"
- "add hl,%[b]"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- "ld hl,4"
- "add hl,%[b]" | HL | |
- lxa $1 > 1 | | remove (ANY)
- allocate(AREG = {IMMEDIATE1,$1},
- HL_REG,BC_REG)
- "push iy"
- "pop %[c]"
- "1:"
- "ld hl,4"
- "add hl,%[c]"
- "ld %[c.2],(hl)"
- "inc hl"
- "ld %[c.1],(hl)"
- "inc hl"
- "dec a"
- "jr nz,1b"
- "ld hl,4"
- "add hl,%[c]"
- erase(AA) | HL | |
- dch | | | | loi 2 |
- loi $1 == 1 | HL_REG | allocate(REG = {IMMEDIATE,0} )
- "ld %[a.2],(hl)"
- erase(%[a]) | %[a] | |
- ... | REG | allocate(REG,AREG)
- move({IREG1,%[1]} , AA)
- move(AA , %[a.2])
- move({IMMEDIATE1,0} , %[a.1])
- erase(AA) | %[a] | |
- loi $1 == 2 | HL_REG_SCR | remove(ALL) allocate(REG)
- "ld %[a.2],(hl)"
- "inc hl"
- "ld %[a.1],(hl)"
- erase(%[1]) | %[a] | |
- loi $1 == 4 | HL_REG_SCR | remove(ALL)
- allocate(AREG,REG)
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- "inc hl"
- "ld a,(hl)"
- "inc hl"
- "ld h,(hl)"
- "ld l,a"
- erase(HL) | HL %[b] | |
- loi $1 <= 511 && $1 > 4 | HL_REG_SCR |
- remove(ALL)
- allocate(AREG,REG)
- move({IMMEDIATE,$1-1} , %[b])
- "add hl,%[b]"
- move({IMMEDIATE1,$1/2} , AA)
- "1:"
- "ld %[b.1],(hl)"
- "dec hl"
- "ld %[b.2],(hl)"
- "dec hl"
- "push %[b]"
- "dec a"
- "jr nz,1b"
- erase(%[a])
- erase(%[b]) | | |
- loi $1 > 511 | STACK | remove(ALL) allocate(ALL_REG)
- move({IMMEDIATE,$1}, HL)
- "push hl"
- "call .los"
- erase(HL) | | |
- los $1 == 2 | STACK | remove(ALL) allocate(ALL_REG)
- "call .los" | | |
- lpi | | | {EXTENDED_ADDR,$1} | |
- /* G R O U P II : S T O R E S */
- stl sfit($1,8) | REG + HL_REG |
- remove(ALL)
- move(%[1.2] , {INDEXED,LB,$1} )
- move(%[1.1] , {INDEXED,LB,$1+1} )
- | | |
- stl | REG |
- remove(ALL)
- allocate(HL_REG = {IMMEDIATE,$1} , REG)
- "push iy"
- "pop %[b]"
- "add hl,%[b]"
- "ld (hl),%[1.2]"
- "inc hl"
- "ld (hl),%[1.1]"
- erase(%[a]) | | |
- ste | ANY_REG | remove(EXTENDED,%[off] == $1)
- remove(ALL)
- move(%[1] , {EXTENDED,$1} ) | | |
- sil ($1 >= 0-128 && $1 < 127) | REG |
- remove(ALL)
- allocate(HL_REG)
- move({INDEXED,LB,$1} , %[a.2])
- move({INDEXED,LB,$1+1} , %[a.1])
- "ld (hl),%[1.2]"
- "inc hl"
- "ld (hl),%[1.1]"
- erase(%[a]) | | |
- sil ($1 < 0-128 || $1 >= 127) | REG |
- remove(ALL)
- allocate(HL_REG,REG)
- "push iy"
- "pop %[b]"
- move({IMMEDIATE,$1} , %[a])
- "add hl,%[b]"
- "ld %[b.2],(hl)"
- "inc hl"
- "ld %[b.1],(hl)"
- "ld h,%[b.1]"
- "ld l,%[b.2]"
- "ld (hl),%[1.2]"
- "inc hl"
- "ld (hl),%[1.1]"
- erase(%[a]) | | |
- stf | HL_REG_SCR REG | remove(ALL)
- allocate(REG = {IMMEDIATE,$1})
- "add hl,%[a]"
- "ld (hl),%[2.2]"
- "inc hl"
- "ld (hl),%[2.1]"
- erase(%[1]) | | |
- sti $1 == 1 | HL_REG REG | remove(ALL)
- "ld (hl),%[2.2]" | | |
- sti $1 == 2 | HL_REG_SCR REG | remove(ALL)
- "ld (hl),%[2.2]"
- "inc hl"
- "ld (hl),%[2.1]"
- erase(%[1]) | | |
- sti $1 == 4 | HL_REG_SCR REG REG |
- remove(ALL)
- "ld (hl),%[2.2]"
- "inc hl"
- "ld (hl),%[2.1]"
- "inc hl"
- "ld (hl),%[3.2]"
- "inc hl"
- "ld (hl),%[3.1]"
- erase(HL) | | |
- sti $1 <= 511 && $1 > 4 | HL_REG_SCR |
- remove(ALL)
- allocate(AREG,REG)
- move({IMMEDIATE1,$1/2} , AA)
- "1:"
- "pop %[b]"
- "ld (hl),%[b.2]"
- "inc hl"
- "ld (hl),%[b.1]"
- "inc hl"
- "dec a"
- "jr nz,1b"
- erase(AA)
- erase(HL) | | |
- sti $1 > 511 | STACK | remove(ALL) allocate(ALL_REG)
- move({IMMEDIATE,$1}, HL)
- "push hl"
- "call .sts"
- erase(HL) | | |
- sts $1 == 2 | STACK | remove(ALL) allocate(ALL_REG)
- "call .sts" | | |
- sdl ($1 >= 0-128 && $1 < 125) | REG REG |
- remove(ALL)
- move(%[1.2] , {INDEXED,LB,$1})
- move(%[1.1] , {INDEXED,LB,$1+1})
- move(%[2.2] , {INDEXED,LB,$1+2})
- move(%[2.1] , {INDEXED,LB,$1+3}) | | |
- sdl ($1 < 0-128 || $1 >= 125) | STACK |
- remove(ALL)
- allocate(HL_REG = {IMMEDIATE,$1} ,
- BC_REG,DE_REG,IX_REG,AREG )
- "call .sdl"
- erase(HL) | | |
- sde | ANY_REG ANY_REG |
- remove(ALL)
- move(%[1] , {EXTENDED,$1})
- move(%[2] , {EXTENDED,$1+"+2"}) | | |
- sdf | | remove(ALL)
- allocate(ALL_REG)
- move({IMMEDIATE,$1},DE)
- "call .sdf"
- | | |
- /* G R O U P III & IV : I N T E G E R A R I T H M E T I C */
- adi $1 == 2 | HL_REG_SCR GEN_REG |
- "add hl,%[2]"
- erase(HL) | HL | |
- ... | GEN_REG HL_REG_SCR |
- "add hl,%[1]"
- erase(HL) | HL | |
- adi $1 == 4 | HL_REG_SCR DE_REG_SCR STACK | allocate(BC_REG)
- "pop bc"
- "add hl,bc"
- "ex de,hl"
- "pop bc"
- "adc hl,bc"
- erase(DE)
- erase(HL) | HL DE | |
- sbi $1 == 2 | GEN_REG HL_REG_SCR |
- "or a"
- "sbc hl,%[1]"
- erase(HL) | HL | |
- sbi $1 == 4 | BC_REG_SCR DE_REG_SCR STACK |
- allocate(HL_REG)
- "or a"
- "pop hl"
- "sbc hl,bc" /* least sign. */
- "ex (sp),hl"
- "sbc hl,de"
- "pop de"
- erase(DE)
- erase(HL) | HL DE | |
- mli $1 == 2 | DE_REG_SCR BC_REG STACK |
- allocate(HL_REG,IX_REG,AREG)
- "call .mli2"
- erase(DE) | HL | |
- mli $1 == 4 | STACK | allocate(ALL_REG)
- "call .mli4" | | |
- dvi $1 == 2 | BC_REG_SCR DE_REG_SCR STACK |
- allocate(HL_REG,IX_REG,AREG)
- "call .dvi2"
- "push de"
- erase(BC)
- erase(DE) | | |
- dvi $1 == 4 | STACK | allocate(ALL_REG)
- "call .dvi4" | | |
- dvu $1 == 2 | BC_REG_SCR DE_REG_SCR STACK |
- allocate(HL_REG,IX_REG,AREG)
- "call .dvu2"
- erase(BC)
- erase(DE) | DE | |
- dvu $1 == 4 | STACK | allocate(ALL_REG)
- "call .dvu4" | | |
- rmi $1 == 2 | BC_REG_SCR DE_REG_SCR STACK |
- allocate(HL_REG,IX_REG,AREG)
- "call .rmi2"
- erase(BC)
- erase(DE) | DE | |
- rmi $1 == 4 | STACK | allocate(ALL_REG)
- "call .dvi4"
- "pop hl"
- "pop hl"
- erase(HL)
- | BC DE | |
- rmu $1 == 2 | BC_REG_SCR DE_REG_SCR STACK |
- allocate(HL_REG,IX_REG,AREG)
- "call .dvu2"
- erase(BC)
- erase(DE) | HL | |
- rmu $1 == 4 | STACK | allocate(ALL_REG)
- "call .dvu4" | BC DE | |
- ngi $1 == 2 | REG | allocate(HL_REG = {IMMEDIATE,0})
- "or a"
- "sbc hl,%[1]"
- erase(HL) | HL | |
- ngi $1 == 4 | DE_REG_SCR BC_REG_SCR |
- allocate(HL_REG,AREG)
- "xor a"
- "ld h,a"
- "ld l,a"
- "sbc hl,de"
- "ex de,hl"
- "ld h,a"
- "ld l,a"
- "sbc hl,bc"
- erase(DE) | HL DE | |
- sli $1 == 2 | REG_SCR HL_REG_SCR |
- "inc %[1.1]" /* see if count >> 15 */
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],15"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "add hl,hl"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(HL) | HL | |
- sli $1 == 4 | REG_SCR IX_REG_SCR HL_REG_SCR |
- "inc %[1.1]"
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],31"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "add ix,ix"
- "adc hl,hl"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(HL)
- erase(IX) | HL IX | |
- sri $1 == 2 | GEN_REG_SCR GEN_REG_SCR |
- "inc %[1.1]"
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],15"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "sra %[2.1]"
- "rr %[2.2]"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(%[2]) | %[2] | |
- sri $1 == 4 | GEN_REG_SCR GEN_REG_SCR GEN_REG_SCR |
- "inc %[1.1]"
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],31"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "sra %[3.1]"
- "rr %[3.2]"
- "rr %[2.1]"
- "rr %[2.2]"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(%[2])
- erase(%[3]) | %[3] %[2] | |
- mlu | | | | mli $1 |
- sru $1 == 2 | GEN_REG_SCR GEN_REG_SCR |
- "inc %[1.1]"
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],15"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "srl %[2.1]"
- "rr %[2.2]"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(%[2]) | %[2] | |
- sru $1 == 4 | GEN_REG_SCR GEN_REG_SCR GEN_REG_SCR |
- "inc %[1.1]"
- "dec %[1.1]"
- "jr z,1f"
- "ld %[1.2],31"
- "1:"
- "dec %[1.2]"
- "jp m,2f"
- "srl %[3.1]"
- "rr %[3.2]"
- "rr %[2.1]"
- "rr %[2.2]"
- "jr 1b"
- "2:"
- erase(%[1])
- erase(%[2])
- erase(%[3]) | %[3] %[2] | |
- adu | | | | adi $1 |
- sbu | | | | sbi $1 |
- slu | | | | sli $1 |
- /* G R O U P V : F L O A T I N G P O I N T */
-
- adf | |
- "call .unimpld" | | |
- sbf | |
- "call .unimpld" | | |
- mlf | |
- "call .unimpld" | | |
- dvf | |
- "call .unimpld" | | |
- ngf | |
- "call .unimpld" | | |
- fif | |
- "call .unimpld" | | |
- fef | |
- "call .unimpld" | | |
- /* G R O U P VI : P O I N T E R A R I T H M E T I C */
- adp $1 == 0 | | | | |
- adp $1 == 1 | ANY_REG_SCR | "inc %[1]"
- erase(%[1]) | %[1] | |
- adp $1 == 2 | ANY_REG_SCR | "inc %[1]"
- "inc %[1]"
- erase(%[1]) | %[1] | |
- adp $1 == 0-1 | ANY_REG_SCR | "dec %[1]"
- erase(%[1]) | %[1] | |
- adp $1 == 0-2 | ANY_REG_SCR | "dec %[1]"
- "dec %[1]"
- erase(%[1]) | %[1] | |
- adp $1 < 0-2 || $1 > 2 | HL_REG_SCR |
- allocate(REG = {IMMEDIATE,$1} )
- "add hl,%[a]"
- erase(HL) | HL | |
- ... | REG |
- allocate(HL_REG = {IMMEDIATE,$1} )
- "add hl,%[1]"
- erase(HL) | HL | |
- ... | LOCAL_ADDR | remove(ALL) | {LOCAL_ADDR, %[1.off]+$1} | |
- ads $1 == 2 | HL_REG_SCR REG | remove(ALL) "add hl,%[2]"
- erase(HL) | HL | |
- ... | REG HL_REG_SCR | "add hl,%[1]"
- erase(HL) | HL | |
- sbs $1 == 2 | REG HL_REG_SCR | "or a"
- "sbc hl,%[1]"
- erase(HL) | HL | |
- /* G R O U P VII : I N C R E M E N T / D E C R E M E N T */
- inc | ANY_REG_SCR | "inc %[1]"
- erase(%[1]) | %[1] | |
- /* There is no efficient way on the Z80 to increment or decrement
- * a local or external. We first fetch the variable into a register,
- * increment/decrement it and then store it.
- */
- inl | | | | lol $1 inc stl $1 |
- ine | | | | loe $1 inc ste $1 |
- dec | ANY_REG_SCR | "dec %[1]"
- erase(%[1]) | %[1] | |
- del | | | | lol $1 dec stl $1 |
- dee | | | | loe $1 dec ste $1 |
- zrl ($1 >= 0-128 && $1 < 127) | |
- remove(ALL)
- allocate(AREG)
- "xor a"
- move(AA , {INDEXED,LB,$1})
- move(AA , {INDEXED,LB,$1+1}) | | |
- zrl ($1 < 0-128 || $1 >= 127) | |
- remove(ALL)
- allocate(HL_REG = {IMMEDIATE,$1} , REG, AREG)
- "push iy"
- "pop %[b]"
- "add hl,%[b]"
- "xor a"
- "ld (hl),a"
- "inc hl"
- "ld (hl),a"
- erase(HL) | | |
- zrf | |
- "call .unimpld" | | |
- zre | | remove(EXTENDED,%[off] == $1)
- remove(ALL)
- allocate(ANY_REG = {IMMEDIATE,0} )
- move(%[a] , {EXTENDED,$1}) | | |
- zer $1 == 2 | | | {IMMEDIATE,0} | |
- zer $1 == 4 | | | {IMMEDIATE,0} {IMMEDIATE,0} | |
- zer $1 > 4 && $1 < 256 | STACK |
- allocate(BC_REG , GEN_REG)
- "ld b,$1"
- "ld %[b],0"
- "1:"
- "push %[b]"
- "djnz 1b"
- | | |
- /* G R O U P VIII : C O N V E R T */
- cii | STACK | remove(ALL) allocate(ALL_REG)
- "call .cii" | | |
- cuu | STACK | remove(ALL) allocate(ALL_REG)
- "call .cuu" | | |
- cui | | | | cuu |
- ciu | | | | cuu |
- cfi | |
- "call .unimpld" | | |
- cif | |
- "call .unimpld" | | |
- cuf | |
- "call .unimpld" | | |
- cff | |
- "call .unimpld" | | |
- cfu | |
- "call .unimpld" | | |
- cmf | |
- "call .unimpld" | | |
- /* G R O U P IX : L O G I C A L */
- and $1 == 2 | GEN_REG GEN_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "and %[2.2]"
- "ld %[2.2],a"
- "ld a,%[1.1]"
- "and %[2.1]"
- "ld %[2.1],a"
- erase(%[2]) | %[2] | |
- and defined($1) && $1 > 2 | STACK |
- allocate(DE_REG = {IMMEDIATE,$1},
- BC_REG,HL_REG,IX_REG,AREG)
- "call .and"
- erase(DE) | | |
- and ! defined($1) | DE_REG_SCR STACK |
- allocate(BC_REG,HL_REG,IX_REG,AREG)
- "call .and"
- erase(DE) | | |
- ior $1 == 2 | GEN_REG GEN_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "or %[2.2]"
- "ld %[2.2],a"
- "ld a,%[1.1]"
- "or %[2.1]"
- "ld %[2.1],a"
- erase(%[2]) | %[2] | |
- ior defined($1) && $1 > 2 | STACK |
- allocate(DE_REG = {IMMEDIATE,$1},
- BC_REG,HL_REG,IX_REG,AREG)
- "call .ior"
- erase(DE) | | |
- ior ! defined($1) | DE_REG_SCR STACK |
- allocate(BC_REG,HL_REG,IX_REG,AREG)
- "call .ior"
- erase(DE) | | |
- xor $1 == 2 | GEN_REG GEN_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "xor %[2.2]"
- "ld %[2.2],a"
- "ld a,%[1.1]"
- "xor %[2.1]"
- "ld %[2.1],a"
- erase(%[2]) | %[2] | |
- xor defined($1) && $1 > 2 | STACK |
- allocate(DE_REG = {IMMEDIATE,$1},
- BC_REG,HL_REG,IX_REG,AREG)
- "call .xor"
- erase(DE) | | |
- xor ! defined($1) | DE_REG_SCR STACK |
- allocate(BC_REG,HL_REG,IX_REG,AREG)
- "call .xor"
- erase(DE) | | |
- com $1 == 2 | GEN_REG_SCR | allocate(AREG)
- "ld a,%[1.2]"
- "cpl"
- "ld %[1.2],a"
- "ld a,%[1.1]"
- "cpl"
- "ld %[1.1],a"
- erase(%[1]) | %[1] | |
- com defined($1) && $1 > 2 | STACK |
- allocate(AREG,
- HL_REG = {IMMEDIATE,$1} )
- "add hl,sp"
- "1:"
- "dec hl"
- "ld a,(hl)"
- "cpl"
- "ld (hl),a"
- "xor a"
- "sbc hl,sp"
- "jr z,2f"
- "add hl,sp"
- "jr 1b"
- "2:"
- erase(HL) | | |
- com ! defined($1) | HL_REG_SCR STACK |
- allocate(AREG)
- "add hl,sp"
- "1:"
- "dec hl"
- "ld a,(hl)"
- "cpl"
- "ld (hl),a"
- "xor a"
- "sbc hl,sp"
- "jr z,2f"
- "add hl,sp"
- "jr 1b"
- "2:"
- erase(HL) | | |
- rol $1 == 2 | REG_SCR HL_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "and 15"
- "jr z,2f"
- "ld %[1],0"
- "1:"
- "add hl,hl"
- "adc hl,%[1]"
- "dec a"
- "jr nz,1b"
- "2:"
- erase(%[1])
- erase(%[2]) | HL | |
- rol $1 == 4 | REG IX_REG_SCR HL_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "and 31"
- "jr z,3f"
- "1:"
- "add ix,ix"
- "adc hl,hl"
- "jr nc,2f"
- "inc ix"
- "2:"
- "dec a"
- "jr nz,1b"
- "3:"
- erase(HL)
- erase(IX) | HL IX | |
- ror $1 == 2 | GEN_REG_SCR GEN_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "and 15"
- "jr z,0f"
- "1:"
- "srl %[2.1]"
- "rr %[2.2]"
- "jr nc,2f"
- "set 7,%[2.1]"
- "2:"
- "dec a"
- "jr nz,1b"
- "0:"
- erase(%[1])
- erase(%[2]) | %[2] | |
- ror $1 == 4 | GEN_REG_SCR GEN_REG_SCR GEN_REG_SCR |
- allocate(AREG)
- "ld a,%[1.2]"
- "and 31"
- "jr z,0f"
- "1:"
- "srl %[3.1]"
- "rr %[3.2]"
- "rr %[2.1]"
- "rr %[2.2]"
- "jr nc,2f"
- "set 7,%[3.1]"
- "2:"
- "dec a"
- "jr nz,1b"
- "0:"
- erase(%[1])
- erase(%[2])
- erase(%[3]) | %[3] %[2] | |
- /* G R O U P X : S E T S */
- inn defined($1) | STACK | allocate(HL_REG = {IMMEDIATE,$1},
- BC_REG,DE_REG,IX_REG,AREG)
- "call .inn"
- erase(HL) | | |
- inn !defined($1) | HL_REG_SCR STACK |
- allocate(BC_REG,DE_REG,IX_REG,AREG)
- "call .inn"
- erase(HL) | | |
- set defined($1) | STACK | allocate(HL_REG = {IMMEDIATE,$1},
- BC_REG,DE_REG,IX_REG,AREG)
- "call .set"
- erase(HL) | | |
- set !defined($1) | HL_REG_SCR STACK |
- allocate(BC_REG,DE_REG,IX_REG,AREG)
- "call .set"
- erase(HL) | | |
- /* G R O U P XI : A R R A Y S */
- lae aar $2 == 2 && rom(1,3) == 2 | STACK |
- allocate(ALL_REG)
- move({EXTENDED_ADDR,$1},BC)
- "push bc"
- "call .aar2" | | |
- lae aar $2 == 2 && rom(1,3) != 2 | STACK |
- allocate(ALL_REG)
- move({EXTENDED_ADDR,$1},BC)
- "push bc"
- "call .aar" | | |
- aar $1==2 | |
- remove(ALL)
- allocate(ALL_REG)
- "call .aar"
- | | |
- aar !defined($1) | | remove(ALL)
- allocate(ALL_REG)
- "call .aaru" | | |
- lae lar $2 == 2 && rom(1,3) == 2 | STACK |
- remove(ALL) allocate(ALL_REG)
- move({EXTENDED_ADDR,$1},BC)
- "push bc"
- "call .lar2" | | |
- lae lar $2 == 2 && rom(1,3) != 2 | STACK |
- remove(ALL) allocate(ALL_REG)
- move({EXTENDED_ADDR,$1},BC)
- "push bc"
- "call .lar" | | |
- lar $1==2 | | remove(ALL)
- allocate(ALL_REG)
- "call .lar" | | |
- lar !defined($1) | | remove(ALL)
- allocate(ALL_REG)
- "call .laru" | | |
- lae sar $2 == 2 && rom(1,3) == 2 | STACK |
- remove(ALL) allocate(ALL_REG)
- move({EXTENDED_ADDR, $1},BC)
- "push bc"
- "call .sar2" | | |
- lae sar $2 == 2 && rom(1,3) != 2 | STACK |
- remove(ALL) allocate(ALL_REG)
- move({EXTENDED_ADDR, $1},BC)
- "push bc"
- "call .sar" | | |
- sar $1==2 | | remove(ALL)
- allocate(ALL_REG)
- "call .sar" | | |
- sar !defined($1) | | remove(ALL)
- allocate(ALL_REG)
- "call .saru" | | |
- /* G R O U P XII : C O M P A R E */
- cmi $1 == 2 | REG_SCR HL_REG_SCR |
- remove(ALL) allocate(AREG)
- "ld a,h"
- "xor %[1.1]"
- "jp m,1f"
- "sbc hl,%[1]"
- "jr 2f"
- "1:"
- "xor %[1.1]"
- "jp m,2f"
- "set 0,l"
- "2:"
- erase(%[1])
- erase(%[2]) | HL | |
- cmi $1 == 4 | STACK | remove(ALL) allocate(AREG = {IMMEDIATE1,1},
- BC_REG,DE_REG,HL_REG,IX_REG)
- "call .cmu4"
- erase(AA) | DE | |
- cmu $1 == 2 | REG_SCR HL_REG_SCR |
- remove(ALL) allocate(AREG)
- "ld a,h"
- "xor %[1.1]" /* resets carry bit */
- "jp m,1f"
- "sbc hl,%[1]"
- "jr 2f"
- "1:"
- "xor %[1.1]"
- "cpl"
- "set 0,l"
- "2:"
- erase(%[1])
- erase(%[2]) | HL | |
- cmu $1 == 4 | STACK | remove(ALL) allocate(AREG = {IMMEDIATE1,0},
- BC_REG,DE_REG,HL_REG,IX_REG)
- "call .cmu4"
- erase(AA) | DE | |
- cmp | | | | cmu 2 |
- cms $1 == 2 | GEN_REG GEN_REG_SCR |
- remove(ALL) allocate(AREG)
- "ld a,%[1.1]"
- "xor %[2.1]"
- "ld %[2.1],a"
- "ld a,%[1.2]"
- "xor %[2.2]"
- "ld %[2.2],a" | %[2] | |
- /***
- cmu defined($1) | STACK | allocate(HL_REG = {IMMEDIATE,$1},
- BC_REG,DE_REG,IX_REG,AREG)
- "call .cmu"
- erase(HL) | | |
- cmu ! defined($1) | HL_REG_SCR STACK |
- allocate(BC_REG,DE_REG,IX_REG,AREG)
- "call .cmu"
- erase(HL) | | |
- */
- cms defined($1) | STACK | remove(ALL) allocate(HL_REG = {IMMEDIATE,$1},
- BC_REG,DE_REG,IX_REG,AREG)
- "call .cms"
- erase(HL) | | |
- cms ! defined($1) | HL_REG_SCR STACK |
- allocate(BC_REG,DE_REG,IX_REG,AREG)
- "call .cms"
- erase(HL) | | |
- tlt | GEN_REG | remove(ALL)
- allocate(GEN_REG = {IMMEDIATE,0})
- "bit 7,%[1.1]"
- "jr z,1f"
- "inc %[a.2]"
- "1:"
- erase(%[a]) | %[a] | |
- tle | GEN_REG | remove(ALL)
- allocate(AREG, GEN_REG = {IMMEDIATE,1})
- "xor a"
- "add a,%[1.1]"
- "jp m,2f"
- "jr nz,1f"
- "xor a"
- "add a,%[1.2]"
- "jr z,2f"
- "1:"
- "dec %[b.2]"
- "2:"
- erase(%[b]) | %[b] | |
- teq | GEN_REG | remove(ALL)
- allocate(AREG,GEN_REG = {IMMEDIATE,0})
- "ld a,%[1.1]"
- "or a"
- "jp m,1f"
- "xor %[1.2]"
- "jr nz,1f"
- "inc %[b.2]"
- "1:"
- erase(%[b]) | %[b] | |
- tne | GEN_REG | remove(ALL)
- allocate(AREG, GEN_REG = {IMMEDIATE,0})
- "ld a,%[1.1]"
- "or %[1.2]"
- "jr z,1f"
- "inc %[b.2]"
- "1:"
- erase(%[b]) | %[b] | |
- tge | GEN_REG | remove(ALL)
- allocate(GEN_REG = {IMMEDIATE,0})
- "bit 7,%[1.1]"
- "jr nz,1f"
- "inc %[a.2]"
- "1:"
- erase(%[a]) | %[a] | |
- tgt | GEN_REG | remove(ALL)
- allocate(AREG, GEN_REG = {IMMEDIATE,0})
- "xor a"
- "add a,%[1.1]"
- "jp m,2f"
- "jr nz,1f"
- "xor a"
- "add a,%[1.2]"
- "jr z,2f"
- "1:"
- "inc %[b.2]"
- "2:"
- erase(%[b]) | %[b] | |
- /* G R O U P XIII : B R A N C H */
- bra | | remove(ALL)
- "jp $1" | | |
- blt | GEN_REG GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jp m,$1" | | |
- ble | GEN_REG GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jp m,$1"
- "jr nz,1f"
- "ld a,%[2.2]"
- "cp %[1.2]"
- "jr z,$1"
- "1:" | | |
- beq | GEN_REG GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "jr nz,1f"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jr z,$1"
- "1:" | | |
- bne | GEN_REG GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "jr nz,$1"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jr nz,$1"
- erase(AA) | | |
- bge | GEN_REG GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jp p,$1" | | |
- bgt | GEN_REG GEN_REG_SCR | remove(ALL) allocate(AREG)
- "ld a,%[2.2]"
- "sub %[1.2]"
- "ld %[2.2],a"
- "ld a,%[2.1]"
- "sbc a,%[1.1]"
- "jp m,1f"
- "jr nz,$1"
- "xor a"
- "cp %[2.2]"
- "jr nz,$1"
- "1:"
- erase(%[2]) | | |
- zlt | GEN_REG | remove(ALL) "bit 7,%[1.1]"
- "jr nz,$1" | | |
- zle | GEN_REG | remove(ALL) allocate(AREG)
- "xor a"
- "add a,%[1.1]"
- "jp m,$1"
- "jr nz,1f"
- "xor a"
- "add a,%[1.2]"
- "jr z,$1"
- "1:" | | |
- zeq | GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[1.1]"
- "or %[1.2]"
- "jr z,$1" | | |
- zne | GEN_REG | remove(ALL) allocate(AREG)
- "ld a,%[1.1]"
- "or %[1.2]"
- "jr nz,$1" | | |
- zge | GEN_REG | remove(ALL) "bit 7,%[1.1]"
- "jr z,$1" | | |
- zgt | GEN_REG | remove(ALL) allocate(AREG)
- "xor a"
- "add a,%[1.1]"
- "jp m,1f"
- "jr nz,$1"
- "xor a"
- "add a,%[1.2]"
- "jr nz,$1"
- "1:" | | |
- /* G R O U P XIV : P R O C E D U R E C A L L S */
- cai | HL_REG | remove(ALL)
- allocate( GEN_REG )
- "ld %[a],1f"
- "push %[a]"
- "jp (hl)"
- "1:"
- | | |
- cal | | remove(ALL)
- allocate(ALL_REG)
- "call $1"
- | | |
- lfr $1 == 2 | | remove(ALL)
- "push de"
- | | |
- lfr $1 == 4 | STACK | "push de"
- "push bc" | | |
- lfr | | remove(ALL)
- move({IMMEDIATE,$1},DE)
- "call .lfr"
- | | |
- ret $1 == 0 | STACK |
- remove(ALL)
- allocate(HL_REG,LOCALBASE)
- "push iy"
- "pop hl"
- "ld sp,hl"
- "pop iy"
- "ret" | | |
- ret $1 == 2 | STACK | remove(ALL)
- allocate(HL_REG,DE_REG,LOCALBASE)
- "pop de"
- "push iy"
- "pop hl"
- "ld sp,hl"
- "pop iy"
- "ret" | | |
- ret $1 == 4 | STACK |
- remove(ALL)
- allocate(BC_REG, DE_REG, HL_REG, LOCALBASE)
- "pop bc"
- "pop de"
- "push iy"
- "pop hl"
- "ld sp,hl"
- "pop iy"
- "ret" | | |
- ret | | remove(ALL)
- move({IMMEDIATE,$1},DE)
- "call .ret"
- erase(BC) | | |
- /* G R O U P XV : M I S C E L L A N E O U S */
- asp $1 == 0 | | | | |
- asp $1 != 0 | STACK | remove(ALL) allocate(HL_REG)
- move({IMMEDIATE,$1} , HL)
- "add hl,sp"
- "ld sp,hl"
- erase(HL) | | |
- ass $1 == 2 | HL_REG_SCR STACK |
- remove(ALL)
- "add hl,sp"
- "ld sp,hl"
- erase(HL) | | |
- blm $1 == 0 | | | | |
- blm $1 > 0 |DE_REG_SCR HL_REG_SCR |
- allocate(BC_REG = {IMMEDIATE,$1} )
- "ldir"
- erase(HL)
- erase(BC)
- erase(DE) | | |
- bls $1 == 2 | BC_REG_SCR DE_REG_SCR HL_REG_SCR |
- remove(MEM_ALL)
- "ldir"
- erase(HL)
- erase(BC)
- erase(DE) | | |
- csa $1 == 2 | STACK | allocate(ALL_REG)
- "jr .csa" | | |
- csb $1 == 2 | STACK | allocate(ALL_REG)
- "jr .csb" | | |
- dus $1 == 2 | BC_REG_SCR | remove(MEM_ALL) allocate(HL_REG,DE_REG)
- move({IMMEDIATE,0} , HL)
- "add hl,sp"
- "ld d,h"
- "ld e,l" /* destination */
- "sbc hl,bc" /* source */
- "ld sp,hl"
- "ex de,hl"
- "ldir"
- erase(HL)
- erase(BC) | | |
- dup $1 == 2 | ANY | | %[1] %[1] | |
- dup $1 == 4 | ANY ANY | | %[2] %[1] %[2] %[1] | |
- dup $1 == 6 | ANY ANY ANY | | %[3] %[2] %[1] %[3] %[2] %[1] | |
- dup $1 > 6 | STACK | allocate(HL_REG,BC_REG,DE_REG)
- move({IMMEDIATE,0} , HL)
- "add hl,sp"
- "ld d,h"
- "ld e,l" /* destination */
- move ({IMMEDIATE,$1},BC) /* count */
- "sbc hl,bc" /* source */
- "ld sp,hl"
- "ex de,hl"
- "ldir"
- erase(HL)
- erase(BC) | | |
- lor $1 == 0 | | "push iy" | | |
- fil | | allocate(HL_REG)
- move({EXTENDED_ADDR,$1},HL)
- "ld (hol0+4),hl"
- erase(HL) | | |
- lor $1 == 1 | STACK | allocate(HL_REG)
- move({IMMEDIATE,0} , HL)
- "add hl,sp"
- erase(HL) | HL | |
- lor $1 == 2 | STACK | | {EXTENDED,".reghp"} | |
- exg $1 == 2 | ANY ANY | | %[1] %[2] | |
- exg | STACK | remove(MEM_ALL)
- allocate(HL_REG)
- move({IMMEDIATE,$1},HL)
- "push hl"
- "call .exg" | | |
- gto | | remove(ALL)
- allocate(ALL_REG)
- move({EXTENDED_ADDR,$1},HL)
- "call .gto"
- | | |
- lim | | | {EXTENDED,"ignmask"} | |
- lin | | remove(ALL) allocate(HL_REG)
- move({IMMEDIATE,$1},HL)
- "ld (hol0),hl"
- erase(HL) | | |
- lni | | allocate(HL_REG)
- "ld hl,hol0"
- "inc (hl)"
- erase(HL) | | |
- lpb | | | | adp 4 |
- nop | STACK |
- #ifdef DEBUG
- allocate(ALL_REG)
- "call .nop"
- #endif
- | | |
- rck $1 == 2 | STACK | allocate(ALL_REG)
- "call .rck"
- | | |
- rtt | | | | ret 0|
- sig | HL_REG_SCR |
- "ld (trapproc),hl"
- "ld hl,trapproc"
- | HL | |
- sim | HL_REG | remove(MEM_ALL)
- "pop hl"
- "ld (ignmask),hl" | | |
- str $1 == 0 | | "pop iy" | | |
- str $1 == 1 | STACK | allocate(HL_REG)
- "pop hl"
- "ld sp,hl" | | |
- str $1 == 2 | STACK | allocate(ALL_REG)
- "call .strhp"
- | | |
- trp| | remove(ALL)
- allocate(ALL_REG)
- "call .trp.z" | | |
- mon | | remove(MEM_ALL)
- "call .mon" | | |
- /* C O E R C I O N S */
- /* from 4 bytes to 2 */
-
- /* to a register */
- | ANYTOK | allocate(ANY_REG)
- move(%[1],%[a]) | %[a] | |
- | STACK | allocate(ANY_REG)
- "pop %[a]" | %[a] | |
- | LOCAL_ADDR | allocate(ANY_REG)
- move(LB,%[a])
- "add %[a],%[1]"
- | %[a] | |
- | IMMEDIATE | allocate(ANY_REG)
- move(%[1],%[a])
- | %[a] | |
-
- /* between registers */
- | GEN_REG | allocate(GEN_REG)
- "ld %[a.1],%[1.1]"
- "ld %[a.2],%[1.2]" | %[a] | |
- | LOCALBASE | allocate(ANY_REG)
- "push iy"
- "pop %[a]" | %[a] | |
- /***********
- ** MOVES **
- ***********/
- MOVES:
- (ANY,ANY,"ld %[2],%[1]")
- (ANY1,ANY1,"ld %[2],%[1]")
- /************
- * STACKS *
- ************/
- STACKS:
- (ANY_REG, , "push %[1]" )
- (MEM_ALL, ANY_REG, move(%[1],%[a])
- "push %[a]" )
- (MEM_ALL, , "push hl"
- move(%[1],HL)
- "ex (sp),hl" )
|