123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857 |
- "$Id$"
- #define SL 6
- #define SSL "6"
- /* savsize is 6 because size of LB is 2 and size of z8000-PC is 4 */
- #define NC nocoercions:
- /*********************************************************
- ** Back end tables for z8000 **
- ** Author: Jan Voors **
- ** **
- ** wordsize = 2 bytes, pointersize = 2 bytes. **
- ** **
- ** Register R13 is used as LB, RR14 is the normal **
- ** z8000-stackpointer. Some global variables are used: **
- ** - reghp : the heap pointer **
- ** - trpim : trap ignore mask **
- ** - trppc : address of user defined trap handler **
- ** **
- ** Floating point arithmetic and constants are not **
- ** implemented. **
- ** **
- *********************************************************/
- /*
- * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
- *
- * This product is part of the Amsterdam Compiler Kit.
- *
- * Permission to use, sell, duplicate or disclose this software must be
- * obtained in writing. Requests for such permissions may be sent to
- *
- * Dr. Andrew S. Tanenbaum
- * Wiskundig Seminarium
- * Vrije Universiteit
- * Postbox 7161
- * 1007 MC Amsterdam
- * The Netherlands
- *
- */
- EM_WSIZE = 2
- EM_PSIZE = 2
- EM_BSIZE = SL
- TIMEFACTOR = 3/4
- REGISTERS:
- R0 = ("R0", 2), REG, B2REG.
- R1 = ("R1", 2), REG, B2REG, XREG.
- R2 = ("R2", 2), REG, B2REG, XREG.
- R3 = ("R3", 2), REG, B2REG, XREG.
- R4 = ("R4", 2), REG, B2REG, XREG.
- R5 = ("R5", 2), REG, B2REG, XREG.
- R6 = ("R6", 2), REG, B2REG, XREG.
- R7 = ("R7", 2), REG, B2REG, XREG.
- R8 = ("R8", 2), REG, XREG.
- R9 = ("R9", 2), REG, XREG.
- R10 = ("R10", 2), REG, XREG.
- R11 = ("R11", 2), REG, XREG.
- R12 = ("R12", 2), REG, XREG.
- LB = ("R13", 2), localbase.
- RR0 = ("RR0", 4, R0, R1), LWREG, LWB2REG.
- RR2 = ("RR2", 4, R2, R3), LWREG, LWB2REG, LWXREG.
- RR4 = ("RR4", 4, R4, R5), LWREG, LWB2REG, LWXREG.
- RR6 = ("RR6", 4, R6, R7), LWREG, LWB2REG, LWXREG.
- RR8 = ("RR8", 4, R8, R9), LWREG, LWXREG.
- RR10 = ("RR10", 4, R10, R11), LWREG, LWXREG.
- RQ0 = ("RQ0", 8, RR0, RR2), DLWREG.
- RQ4 = ("RQ4", 8, RR4, RR6), DLWREG.
- RQ8 = ("RQ8", 8, RR8, RR10), DLWREG.
- /**/
- TOKENS:
- /* z8000-addressing-modes 'ra', 'ba' and 'bx' never used so far,
- ** so there are no tokens for them (yet).
- */
- ir1 = { REGISTER lwxreg; } 2 cost=(0,2) "*%[lwxreg]"
- ir2 = { REGISTER lwxreg; } 2 cost=(0,2) "*%[lwxreg]"
- ir4 = { REGISTER lwxreg; } 4 cost=(0,5) "*%[lwxreg]"
- ir4_hi = { REGISTER lwreg; } 2
- da1 = { STRING ind; } 2 cost=(4,4) "%[ind]"
- da2 = { STRING ind; } 2 cost=(4,4) "%[ind]"
- da4 = { STRING ind; } 4 cost=(4,7) "%[ind]"
- im2 = { INT num; } 2 cost=(2,2) "$%[num]"
- im4 = { INT num; } 4 cost=(4,5) "$%[num]"
- double = { STRING ind; } 4 cost=(4,5) "$%[ind]"
- x1 = { REGISTER xreg; INT ind; } 2 cost=(4,5) "%[ind](%[xreg])"
- x2 = { REGISTER xreg; INT ind; } 2 cost=(4,5) "%[ind](%[xreg])"
- x4 = { REGISTER xreg; INT ind; } 4 cost=(4,8) "%[ind](%[xreg])"
- ADDR_LOCAL = { INT ind; } 2
- ADDR_EXTERNAL = { STRING ind; } 2 cost=(2,3) "$%[ind]"
- regconst2 = { REGISTER xreg; INT ind; } 2
- TOKENEXPRESSIONS:
- REGS = REG + LWREG + DLWREG
- SCR_REG = REG * SCRATCH
- SCR_XREG = XREG * SCRATCH
- SCR_LWREG = LWREG * SCRATCH
- SCR_DLWREG = DLWREG * SCRATCH
- src1 = ir1 + da1 + x1
- src2 = REG + ir2 + im2 + da2 + x2 + localbase + ADDR_EXTERNAL
- src4 = LWREG + ir4 + im4 + da4 + x4 + double
- indexed = x1 + x2 + x4
- ind_access = ir1 + ir2 + ir4
- da = da1 + da2 + da4
- const2 = im2 + ADDR_EXTERNAL
- const4 = im4 + double
- allexceptcon = ALL - REGS - im2 - im4 - double - ADDR_LOCAL
- - ADDR_EXTERNAL
- src2a = ir2 + da2 + x2
- src4a = ir4 + da4 + x4
- src2b = REG + im2 + localbase + ADDR_EXTERNAL
- src4b = LWREG
- src2c = REG + ir2 + da2 + x2
- CODE:
- /**/
- /***************************************
- ******** GROUP 1 ********
- ***************************************/
- loc | | | {im2, $1} | |
- ldc | | allocate( LWREG )
- move( {im2, highw(1)}, %[a.1] )
- move( {im2, loww(1)}, %[a.2] ) | %[a] | |
- lol | | | {x2, LB, $1} | |
- ldl | | | {x4, LB, $1} | |
- loe | | | {da2, $1} | |
- lde | | | {da4, $1} | |
- lil | | allocate( LWXREG )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] ) | {ir2,%[a]} | |
- lof | XREG | | {x2, %[1], $1} | |
- ... | NC regconst2 | | {x2, %[1.xreg], $1+%[1.ind]} | |
- ... | NC ADDR_EXTERNAL | | {da2, tostring($1)+"+"+%[1.ind]} | |
- ... | NC ADDR_LOCAL | | {x2, LB, %[1.ind]+$1} | |
- ldf | XREG | | {x4, %[1], $1} | |
- ... | NC regconst2 | | {x4, %[1.xreg], $1+%[1.ind]} | |
- ... | NC ADDR_EXTERNAL | | {da4, tostring($1)+"+"+%[1.ind]} | |
- ... | NC ADDR_LOCAL | | {x4, LB, %[1.ind]+$1} | |
- lal | | | { ADDR_LOCAL, $1 } | |
- lae | | | { ADDR_EXTERNAL, $1 } | |
- lxl $1==0 | | | LB | |
- lxl $1==1 | | | {x2, LB, SL} | |
- lxl $1==2 | | allocate( XREG = {x2, LB, SL} ) | {x2, %[a], SL}| |
- lxl $1>2 | | allocate( XREG = {x2, LB, SL}, REG = {im2, $1-1} )
- "1:\tld %[a], 6(%[a])"
- "djnz %[b], 1b"
- erase(%[a]) erase(%[b]) samecc | %[a] | |
- lxa $1==0 | | | {ADDR_LOCAL, SL} | |
- lxa $1==1 | | allocate( XREG = {x2, LB, SL} ) |
- {regconst2, %[a], SL} | |
- lxa $1==2 | | allocate( XREG = {x2, LB, SL} )
- move( {x2, %[a], SL }, %[a] ) |
- {regconst2, %[a], SL} | |
- lxa $1>2 | | allocate( XREG = {x2, LB, SL}, REG = {im2, $1-1} )
- "1:\tld %[a], 6(%[a])"
- "djnz %[b], 1b"
- erase(%[a]) erase(%[b]) samecc |
- {regconst2, %[a], SL} | |
- loi $1==1 | NC regconst2 | | {x1, %[1.xreg], %[1.ind]} | |
- ... | NC ADDR_LOCAL| | {x1, LB, %[1.ind]} | |
- ... | NC ADDR_EXTERNAL | | {da1, %[1.ind]} | |
- ... | src2 | allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- | {ir1, %[a]} | |
- loi $1==2 | NC regconst2 | | {x2, %[1.xreg], %[1.ind]} | |
- ... | NC ADDR_LOCAL| | {x2, LB, %[1.ind]} | |
- ... | NC ADDR_EXTERNAL | | {da2, %[1.ind]} | |
- ... | src2 | allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- | {ir2, %[a]} | |
- loi $1==4 | NC regconst2 | | {x4, %[1.xreg], %[1.ind]} | |
- ... | NC ADDR_LOCAL| | {x4, LB, %[1.ind]} | |
- ... | NC ADDR_EXTERNAL | | {da4, %[1.ind]} | |
- ... | src2 | allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- | {ir4, %[a]} | |
- loi $1>4 | src2 STACK | allocate( REG = {im2, $1/2} )
- allocate( %[1], LWXREG )
- move( %[1], %[b.2] )
- move( {im2, 0}, %[b.1] )
- "add %[b.2], $$$1-2"
- "dec R15, $$2"
- "lddr *RR14, *%[b], %[a]"
- "inc R15, $$2"
- erase(%[a]) erase(%[b]) nocc | | |
- lal loi $2==6 | STACK | "push *RR14, $1+4(R13)"
- "pushl *RR14, $1(R13)" | | |
- lal loi $2==8 | STACK | "pushl *RR14, $1+4(R13)"
- "pushl *RR14, $1(R13)" | | |
- lae loi $2==6 | STACK | "push *RR14, $1+4"
- "pushl *RR14, $1" | | |
- lae loi $2==8 | STACK | "pushl *RR14, $1+4"
- "pushl *RR14, $1" | | |
- los $1==2 | STACK | "calr los2" | | |
- los !defined($1)| src2c STACK | "cp %[1], $$2"
- "jr NE, unknown"
- "calr los2" | | |
- lpi | | | {ADDR_EXTERNAL, $1} | |
- /**/
- /***************************************
- ******** GROUP 2 ********
- ***************************************/
- stl | src2b | remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- move( %[1], {x2, LB, $1} ) | | |
- ste | src2b | remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- move( %[1], {da2, $1} ) | | |
- sil | src2b | remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- move( %[1], {ir2, %[a]} ) | | |
- stf | regconst2 src2b |
- remove( allexceptcon )
- move( %[2], {x2, %[1.xreg], $1+%[1.ind]} ) | | |
- ... | ADDR_EXTERNAL src2b |
- remove( allexceptcon )
- move( %[2], {da2, tostring($1)+"+"+%[1.ind]} ) | | |
- sti $1==1 | regconst2 const2 | remove( allexceptcon )
- move( %[2], {x1, %[1.xreg], %[1.ind]} ) | | |
- ... | regconst2 B2REG | remove( allexceptcon )
- move( %[2], {x1, %[1.xreg], %[1.ind]} ) | | |
- ... | NC ADDR_LOCAL const2 | remove( allexceptcon )
- move( %[2], {x1, LB, %[1.ind]} ) | | |
- ... | ADDR_LOCAL B2REG | remove( allexceptcon )
- move( %[2], {x1, LB, %[1.ind]} ) | | |
- ... | NC ADDR_EXTERNAL const2 | remove( allexceptcon )
- move( %[2], {da1, %[1.ind]} ) | | |
- ... | ADDR_EXTERNAL B2REG | remove( allexceptcon )
- move( %[2], {da1, %[1.ind]} ) | | |
- ... | src2 const2 | remove( allexceptcon )
- allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- move( %[2], {ir1, %[a]} ) | | |
- ... | src2 B2REG | remove( allexceptcon )
- allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- move( %[2], {ir1, %[a]} ) | | |
- sti $1==2 | regconst2 src2b | remove( allexceptcon )
- move( %[2], {x2, %[1.xreg], %[1.ind]} ) | | |
- ... | ADDR_LOCAL src2b | remove( allexceptcon )
- move( %[2], {x2, LB, %[1.ind]} ) | | |
- ... | ADDR_EXTERNAL src2b | remove( allexceptcon )
- move( %[2], {da2, %[1.ind]} ) | | |
- ... | src2 src2b | remove( allexceptcon )
- allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- move( %[2], {ir2, %[a]} ) | | |
- sti $1==4 | regconst2 src4b | remove( allexceptcon )
- move( %[2], {x4, %[1.xreg], %[1.ind]} ) | | |
- ... | ADDR_LOCAL src4b | remove( allexceptcon )
- move( %[2], {x4, LB, %[1.ind]} ) | | |
- ... | ADDR_EXTERNAL src4b | remove( allexceptcon )
- move( %[2], {da4, %[1.ind]} ) | | |
- ... | src2 src4b | remove( allexceptcon )
- allocate( %[1], LWXREG )
- move( %[1], %[a.2] )
- move( {im2, 0}, %[a.1] )
- move( %[2], {ir4, %[a]} ) | | |
- sti $1>4 | src2 STACK |
- allocate( REG = {im2, $1/2} )
- allocate( %[1], LWXREG )
- move( %[1], %[b.2] )
- move( {im2, 0}, %[b.1] )
- "ldir *%[b], *RR14, %[a]"
- erase(%[a]) erase(%[b]) nocc | | |
- lal sti $2>4 && $2<=8 | NC src2b | | %[1] |
- stl $1 lal $1+2 sti $2-2 |
- ... | | | {ADDR_LOCAL, $1} | sti $2 |
- sts $1==2 | STACK | "calr sts2" | | |
- sts !defined($1)| src2c STACK | "cp %[1], $$2"
- "jr NE, unknown"
- "calr sts2" | | |
- sdl | src4b | remove( x2, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+2 ))
- remove( x4, %[xreg]==LB &&
- ( %[ind]>=$1-2 && %[ind]<=$1+2 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]>=$1 && %[ind]<=$1+3 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- move( %[1], {x4, LB, $1} ) | | |
- sde | src4b | remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- move( %[1], {da4, $1} ) | | |
- sdf | regconst2 src4b |
- remove( allexceptcon )
- move( %[2], {x4, %[1.xreg], $1+%[1.ind]} ) | | |
- ... | ADDR_EXTERNAL src4b |
- remove( allexceptcon )
- move( %[2], {da4, tostring($1)+"+"+%[1.ind]} ) | | |
- /**/
- /***************************************
- ******** GROUP 3 ********
- ***************************************/
- adi $1==2 | NC SCR_XREG im2 | |
- {regconst2, %[1], %[2.num]} | |
- ... | NC SCR_XREG ADDR_LOCAL |
- "add %[1], R13"
- erase(%[1]) |
- {regconst2, %[1], %[2.ind]} | |
- ... | NC REG ADDR_LOCAL |
- allocate( XREG )
- "ld %[a], R13"
- "add %[a], %[1]"
- erase(%[a]) |
- {regconst2, %[a], %[2.ind]} | |
- ... | NC SCR_XREG regconst2 |
- "add %[1], %[2.xreg]"
- erase(%[1]) |
- {regconst2, %[1], %[2.ind]} | |
- ... | NC im2 ADDR_LOCAL | |
- {ADDR_LOCAL, %[1.num]+%[2.ind]} | |
- ... | NC src2 im2+ADDR_LOCAL |
- allocate( %[1], XREG = %[1] ) |
- %[2] %[a] | adi 2 |
- ... | NC src2 regconst2 |
- "add %[2.xreg], %[1]"
- erase(%[2.xreg]) | %[2] | |
- ... | NC regconst2 im2 | |
- {regconst2, %[1.xreg], %[2.num]+%[1.ind]} | |
- ... | NC regconst2 ADDR_LOCAL |
- "add %[1.xreg], R13"
- erase(%[1.xreg]) |
- {regconst2, %[1.xreg],
- %[2.ind]+%[1.ind]} | |
- ... | NC regconst2 regconst2 |
- "add %[1.xreg],%[2.xreg]"
- erase(%[1.xreg]) |
- {regconst2, %[1.xreg],
- %[2.ind]+%[1.ind]} | |
- ... | NC regconst2 src2-im2 |
- "add %[1.xreg], %[2]"
- erase(%[1.xreg]) | %[1] | |
- ... | NC ADDR_LOCAL regconst2 |
- "add %[2.xreg], R13"
- erase(%[2.xreg]) |
- {regconst2, %[2.xreg],
- %[1.ind]+%[2.ind]} | |
- ... | NC ADDR_LOCAL src2 | | %[1] %[2] | adi 2 |
- ... | NC SCR_REG src2-im2 | "add %[1], %[2]"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- ... | src2 SCR_REG | "add %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | |
- adi $1==4 | src4 SCR_LWREG |
- "addl %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,8)+%[1]
- ... | SCR_LWREG src4 |
- "addl %[1], %[2]"
- erase(%[1])
- setcc(%[1]) | %[1] | | (2,8)+%[2]
- sbi $1==2 | src2 SCR_REG | "sub %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,4)+%[1]
- ... | SCR_REG src2 | "sub %[1], %[2]"
- erase(%[1])
- | %[1] | ngi 2 | (2,4)+%[2]
- sbi $1==4 | src4 SCR_LWREG |
- "subl %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,8)+%[1]
- ... | SCR_LWREG src4 |
- "subl %[1], %[2]"
- erase(%[1])
- | %[1] | ngi 4 | (2,8)+%[2]
- mli $1==2 | src2 src2 | allocate( %[2], LWREG )
- move( %[2], %[a.2] )
- "mult %[a], %[1]"
- erase(%[a])
- setcc(%[a.2]) | %[a.2] | |
- mli $1==4 | src4 src4 | allocate( %[2], DLWREG )
- move( %[2], %[a.2] )
- "multl %[a], %[1]"
- erase(%[a])
- setcc(%[a.2]) | %[a.2] | |
- dvi $1==2 | src2 src2 | allocate( %[2], LWREG )
- move( %[2], %[a.2] )
- "exts %[a]"
- "div %[a], %[1]"
- erase(%[a])
- nocc | %[a.2] | |
- dvi $1==4 | src4 src4 | allocate( %[2], DLWREG )
- move( %[2], %[a.2] )
- "extsl %[a]"
- "divl %[a], %[1]"
- erase(%[a])
- nocc | %[a.2] | |
- rmi $1==2 | src2 src2 | allocate( %[2], LWREG )
- move( %[2], %[a.2] )
- "exts %[a]"
- "div %[a], %[1]"
- erase(%[a])
- nocc | %[a.1] | |
- rmi $1==4 | src4 src4 | allocate( %[2], DLWREG )
- move( %[2], %[a.2] )
- "extsl %[a]"
- "divl %[a], %[1]"
- erase(%[a])
- nocc | %[a.1] | |
- ngi $1==2 | SCR_REG | "neg %[1]"
- erase(%[1])
- setcc(%[1]) | %[1] | | (2,7)
- ngi $1==4 | src4 | allocate( LWREG = {im4, 0} )
- "subl %[a], %[1]"
- erase(%[a])
- setcc(%[a]) | %[a] | | (2,8)+%[1]
- sli $1==2 | im2 SCR_REG | "sla %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,0)
- ... | REG SCR_REG | "sda %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- sli $1==4 | im2 SCR_LWREG | "slal %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,0)
- ... | REG SCR_LWREG | "sdal %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- sri $1==2 | im2 SCR_REG | allocate( REG = {im2, 0-%[1.num]} )
- "sda %[2], %[a]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- ... | REG SCR_REG | "neg %[1]"
- "sda %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (6,9)
- sri $1==4 | im2 SCR_LWREG | allocate( REG = {im2, 0-%[1.num]} )
- "sdal %[2], %[a]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- ... | REG SCR_LWREG | "neg %[1]"
- "sdal %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (6,9)
- lol loc adi stl $1==$4 && $3==2 && $2>=0-16 && $2<=16 | | | |
- loc $2 lol $1 adi $3 stl $4 |
- loc lol adi stl $2==$4 && $3==2 && $1>0 && $1<=16 | |
- remove( x2, %[xreg]==LB && %[ind]==$2 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$2-2 || %[ind]==$2 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$2 || %[ind]==$2+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $2(R13), $$$1"
- setcc({x2, LB, $2}) | | |
- loc lol adi stl $2==$4 && $3==2 && $1<0 && $1>=0-16 | |
- remove( x2, %[xreg]==LB && %[ind]==$2 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$2-2 || %[ind]==$2 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$2 || %[ind]==$2+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $2(R13), $$0-$1"
- setcc({x2, LB, $2}) | | |
- loe loc adi ste $1==$4 && $3==2 && $2>=0-16 && $2<=16 | | | |
- loc $2 loe $1 adi $3 ste $4 |
- loc loe adi ste $2==$4 && $3==2 && $1>0 && $1<=16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $2, $$$1"
- setcc({da2, $2}) | | |
- loc loe adi ste $2==$4 && $3==2 && $1<0 && $1>=0-16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $2, $$0-$1"
- setcc({da2, $2}) | | |
- lil loc adi sil $1==$4 && $3==2 && $2>=0-16 && $2<=16 | | | |
- loc $2 lil $1 adi $3 sil $4 |
- loc lil adi sil $2==$4 && $3==2 && $1>0 && $1<=16 | |
- remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $2}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "inc *%[a], $$$1"
- setcc({ir2, %[a]}) | | |
- loc lil adi sil $2==$4 && $3==2 && $1<0 && $1>=0-16 | |
- remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $2}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "dec *%[a], $$0-$1"
- setcc({ir2, %[a]}) | | |
- lol loc sbi stl $1==$4 && $3==2 && $2>0 && $2<=16 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1(R13), $$$2"
- setcc({x2, LB, $1}) | | |
- lol loc sbi stl $1==$4 && $3==2 && $2<0 && $2>=0-16 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1(R13), $$0-$2"
- setcc({x2, LB, $1}) | | |
- loe loc sbi ste $1==$4 && $3==2 && $2>0 && $2<=16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1, $$$2"
- setcc({da2, $1}) | | |
- loe loc sbi ste $1==$4 && $3==2 && $2<0 && $2>=0-16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1, $$0-$2"
- setcc({da2, $1}) | | |
- lil loc sbi sil $1==$4 && $3==2 && $2>0 && $2<=16 | |
- remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "dec *%[a], $$$2"
- setcc({ir2, %[a]}) | | |
- lil loc sbi sil $1==$4 && $3==2 && $2<0 && $2>=0-16 | |
- remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "inc *%[a], $$0-$2"
- setcc({ir2, %[a]}) | | |
- lol ngi stl $1==$3 && $2==2 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- remove( allexceptcon )
- "neg $1(R13)"
- setcc({x2, LB, $1}) | | |
- loe ngi ste $1==$3 && $2==2 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "neg $1"
- setcc({da2, $1}) | | |
- lil ngi sil $1==$3 && $2==2 | |
- remove( allexceptcon )
- allocate( LWXREG )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "neg *%[a]"
- setcc({ir2, %[a]}) | | |
- loc sli $1>=0 && $1<=16 && $2==2 | SCR_REG |
- "sla %[1], $$$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- loc sli $1>=0 && $1<=32 && $2==4 | SCR_LWREG |
- "slal %[1], $$$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- loc sri $1>=0 && $1<=16 && $2==2 | SCR_REG |
- "sra %[1], $$-$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- loc sri $1>=0 && $1<=32 && $2==4 | SCR_LWREG |
- "sral %[1], $$-$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- loc sru $1>=0 && $1<=16 && $2==2 | SCR_REG |
- "srl %[1], $$-$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- loc sru $1>=0 && $1<=32 && $2==4 | SCR_LWREG |
- "srll %[1], $$-$1"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- /**/
- /***************************************
- ******** GROUP 4 ********
- ***************************************/
- /* adu = adi
- ** sbu = sbi
- ** mlu = mli
- ** slu = sli
- */
- adu | | | | adi $1 |
- sbu | | | | sbi $1 |
- mlu | | | | mli $1 |
- slu | | | | sli $1 |
- dvu $1==2 | STACK | "calr dvu2" | R1 | |
- dvu $1==4 | STACK | "calr dvu4" | R3 R2 | |
- rmu $1==2 | STACK | "calr rmu2" | R0 | |
- rmu $1==4 | STACK | "calr rmu4" | R1 R0 | |
- sru $1==2 | im2 SCR_REG | allocate( REG = {im2, 0-%[1.num]} )
- "sdl %[2], %[a]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- ... | REG SCR_REG | "neg %[1]"
- "sdl %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (6,9)
- sru $1==4 | im2 SCR_LWREG | allocate( REG = {im2, 0-%[1.num]} )
- "sdll %[2], %[a]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (4,2)
- ... | REG SCR_LWREG | "neg %[1]"
- "sdll %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (6,9)
- /**/
- /***************************************
- ******** GROUP 6 ********
- ***************************************/
- adp | SCR_XREG | | {regconst2, %[1], $1} | |
- ... | NC regconst2 | | {regconst2, %[1.xreg], $1+%[1.ind]} | |
- ... | NC ADDR_LOCAL | | {ADDR_LOCAL, %[1.ind]+$1 } | |
- ... | NC ADDR_EXTERNAL | | {ADDR_EXTERNAL,
- tostring($1)+"+"+%[1.ind]} | |
- lil adp sil $1==$3 && $2>0 && $2<=16 | | allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "inc *%[a], $$$2"
- setcc({ir2, %[a]}) | | |
- lil adp sil $1==$3 && $2<0 && $2>=0-16 | | allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "dec *%[a], $$0-$2"
- setcc({ir2, %[a]}) | | |
- lil adp dup sil adp $1==$4 && $3==2 && $2==1 && $5==0-1 | |
- allocate( LWXREG, XREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "ld %[b], *%[a]"
- "inc *%[a]" | {regconst2, %[b], 0} | |
- /* because the next EM-instruction
- ** will be `loi'.
- */
- lil adp dup sil $1==$4 && $3==2 && $2==1 | |
- allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "inc *%[a]"
- setcc({ir2, %[a]}) | {ir2,%[a]} | |
- lol dup adp stl $1==$4 && $2==2 && $3>0 && $3<=16 | |
- allocate( REG = {x2, LB, $1} )
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1(R13), $$$3"
- setcc({x2, LB, $1}) | %[a] | |
- lol dup adp stl $1==$4 && $2==2 && $3<0 && $3>=0-16 | |
- allocate( REG = {x2, LB, $1} )
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1(R13), $$0-$3"
- setcc({x2, LB, $1}) | %[a] | |
- loe dup adp ste $1==$4 && $2==2 && $3>0 && $3<=16 | |
- allocate( REG = {da2, $1} )
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1, $$$3"
- setcc({da2, $1}) | %[a] | |
- loe dup adp ste $1==$4 && $2==2 && $3<0 && $3>=0-16 | |
- allocate( REG = {da2, $1} )
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1, $$0-$3"
- setcc({da2, $1}) | %[a] | |
- lol adp stl $1==$3 && $2>0 && $2<=16 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1(R13), $$$2"
- setcc({x2, LB, $1}) | | |
- lol adp stl $1==$3 && $2<0 && $2>=0-16 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1(R13), $$0-$2"
- setcc({x2, LB, $1}) | | |
- loe adp ste $1==$3 && $2>0 && $2<=16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1, $$$2"
- setcc({da2, $1}) | | |
- loe adp ste $1==$3 && $2<0 && $2>=0-16 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1, $$0-$2"
- setcc({da2, $1}) | | |
- ads $1==2 | | | | adi $1 |
- ads $1==4 | | | | adi $1 |
- sbs $1==2 | | | | sbi $1 |
- sbs $1==4 | | | | sbi $1 |
- /**/
- /***************************************
- ******** GROUP 7 ********
- ***************************************/
- inc | SCR_REG | "inc %[1]"
- erase(%[1]) setcc(%[1]) | %[1] | |
- lil inc sil $1==$3 | | allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "inc *%[a]"
- setcc({ir2, %[a]}) | | |
- dec | SCR_REG | "dec %[1]"
- erase(%[1]) setcc(%[1]) | %[1] | |
- lil dec sil $1==$3 | | allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "dec *%[a]"
- setcc({ir2, %[a]}) | | |
- lil dec dup sil $1==$4 && $3==2 | | allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "dec *%[a]"
- setcc({ir2, %[a]}) | {ir2,%[a]} | |
- inl | | remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB && ( %[ind]==$1-2 || %[ind]==$1 ) )
- remove( x1, %[xreg]==LB && ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1(R13)"
- setcc({x2, LB, $1}) | | |
- del | | remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB && ( %[ind]==$1-2 || %[ind]==$1 ) )
- remove( x1, %[xreg]==LB && ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1(R13)"
- setcc({x2, LB, $1}) | | |
- zrl | | remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB && ( %[ind]==$1-2 || %[ind]==$1 ) )
- remove( x1, %[xreg]==LB && ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "clr $1(R13)"
- samecc | | |
- ine | | remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "inc $1"
- setcc({da2, $1}) | | |
- dee | | remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "dec $1"
- setcc({da2, $1}) | | |
- zre | | remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "clr $1"
- samecc | | |
- zer $1==2 | | | {im2, 0} | |
- zer $1==4 | | | {im4, 0} | |
- zer $1==6 | | | {im4, 0} {im2, 0} | |
- zer $1==8 | | | {im4, 0} {im4, 0} | |
- zer $1>8 | | remove( ALL )
- allocate( REG = {im2, $1/2} ) /*nr of words*/
- "1:\tpush *RR14, $$0"
- "djnz %[a], 1b"
- erase(%[a]) samecc | | |
- zer !defined($1)| SCR_REG | remove( ALL )
- "sra %[1]"
- "1:\tpush *RR14, $$0"
- "djnz %[1], 1b"
- erase(%[1]) nocc | | |
- /**/
- /***************************************
- ******** GROUP 8 ********
- ***************************************/
- cii | STACK | "calr cii" | | |
- loc loc cii $1==1 && $2==2 | NC src1 |
- allocate( %[1], B2REG = %[1] ) | %[a] | |
- ... | src2 | allocate( %[1], REG = %[1] )
- "extsb %[a]"
- erase(%[a]) samecc | %[a] | |
- loc loc cii $1==1 && $2==4 | NC src1 |
- allocate( %[1], LWB2REG )
- move( %[1], %[a.2] )
- "exts %[a]"
- samecc | %[a] | |
- ... | src2 | allocate( %[1], LWREG )
- move( %[1], %[a.2] )
- "exts %[a]"
- samecc | %[a] | |
- loc loc cii $1==2 && $2==4 | src2 | allocate( %[1], LWREG )
- move( %[1], %[a.2] )
- "exts %[a]"
- samecc | %[a] | |
- loc loc loc cii $1>=0 && $2==2 && $3==4 | | | | loc $1 loc 0 |
- loc loc loc cii $1< 0 && $2==2 && $3==4 | | | | loc $1 loc 0-1 |
- loc loc cii $1==4 && $2==2 | src2 src2 | | %[2] | |
- loc loc cuu $1==2 && $2==4 | | | {im2, 0} | |
- loc loc cuu $1==4 && $2==2 | src2 | | | |
- cuu | STACK | "calr cuu" | | |
- ciu | | | | cuu |
- cui | | | | cuu |
- /**/
- /***************************************
- ******** GROUP 9 ********
- ***************************************/
- and $1==2 | SCR_REG src2 | "and %[1], %[2]"
- erase(%[1])
- setcc(%[1]) | %[1] | | (2,4)+%[2]
- ... | src2 SCR_REG | "and %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,4)+%[1]
- and $1>2 | | remove( ALL )
- allocate( LWXREG, REG, REG = {im2, $1/2} )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "1:\tpop %[b], *RR14"
- "and %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[c], 1b"
- erase(%[c]) nocc | | |
- and !defined($1)| SCR_REG | remove( ALL )
- allocate( LWXREG, REG )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "sra %[1]"
- "1:\tpop %[b], *RR14"
- "and %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[1], 1b"
- erase(%[1]) nocc | | |
- ior $1==2 | SCR_REG src2 | "or %[1], %[2]"
- erase(%[1])
- setcc(%[1]) | %[1] | | (2,4)+%[2]
- ... | src2 SCR_REG | "or %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,4)+%[1]
- ior $1>2 | | remove( ALL )
- allocate( LWXREG, REG, REG = {im2, $1/2} )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "1:\tpop %[b], *RR14"
- "or %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[c], 1b"
- erase(%[c]) nocc | | |
- ior !defined($1)| SCR_REG | remove( ALL )
- allocate( LWXREG, REG )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "sra %[1]"
- "1:\tpop %[b], *RR14"
- "or %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[1], 1b"
- erase(%[1]) nocc | | |
- xor $1==2 | SCR_REG src2 | "xor %[1], %[2]"
- erase(%[1])
- setcc(%[1]) | %[1] | | (2,4)+%[2]
- ... | src2 SCR_REG | "xor %[2], %[1]"
- erase(%[2])
- setcc(%[2]) | %[2] | | (2,4)+%[1]
- xor $1>2 | | remove( ALL )
- allocate( LWXREG, REG, REG = {im2, $1/2} )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "1:\tpop %[b], *RR14"
- "xor %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[c], 1b"
- erase(%[c]) nocc | | |
- xor !defined($1)| SCR_REG | remove( ALL )
- allocate( LWXREG, REG )
- "ldl %[a], RR14"
- "addl %[a], $$$1"
- "sra %[1]"
- "1:\tpop %[b], *RR14"
- "xor %[b], *%[a]"
- "ld *%[a], %[b]"
- "inc %[a.2], $$2"
- "djnz %[1], 1b"
- erase(%[1]) nocc | | |
- com $1==2 | SCR_REG | "com %[1]"
- erase(%[1])
- setcc(%[1]) | %[1] | |
- com defined($1) | STACK | allocate( LWXREG, REG = {im2, $1/2} )
- "ldl %[a], RR14"
- "1:\tcom *%[a]"
- "inc %[a.2], $$2"
- "djnz %[b], 1b"
- erase(%[b]) nocc | | |
- com !defined($1)| SCR_REG STACK | allocate( LWXREG )
- "ldl %[a], RR14"
- "1:\tcom *%[a]"
- "inc %[a.2], $$2"
- "djnz %[1], 1b"
- erase(%[1]) nocc | | |
- lil and sil $1==$3 && $2==2 | SCR_REG |
- allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "and %[1], *%[a]"
- "ld *%[a], %[1]" | | |
- lil ior sil $1==$3 && $2==2 | SCR_REG |
- allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "or %[1], *%[a]"
- "ld *%[a], %[1]" | | |
- lil xor sil $1==$3 && $2==2 | SCR_REG |
- allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "xor %[1], *%[a]"
- "ld *%[a], %[1]" | | |
- lol com stl $1==$3 && $2==2 | |
- remove( x2, %[xreg]==LB && %[ind]==$1 )
- remove( x4, %[xreg]==LB &&
- ( %[ind]==$1-2 || %[ind]==$1 ))
- remove( x1, %[xreg]==LB &&
- ( %[ind]==$1 || %[ind]==$1+1 ))
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- remove( allexceptcon )
- "com $1(R13)"
- setcc({x2, LB, $1}) | | |
- loe com ste $1==$3 && $2==2 | |
- remove( da )
- remove( indexed, %[xreg]!=LB )
- remove( ind_access )
- "com $1"
- setcc({da2, $1}) | | |
- lil com sil $1==$3 && $2==2 | |
- allocate( LWXREG )
- remove( allexceptcon )
- move( {x2, LB, $1}, %[a.2] )
- move( {im2, 0}, %[a.1] )
- "com *%[a]"
- setcc({ir2, %[a]}) | | |
- rol $1==2 | SCR_REG SCR_REG | "1:\trl %[2]"
- "djnz %[1], 1b"
- erase(%[2])
- setcc(%[2]) | %[2] | |
- ror $1==2 | SCR_REG SCR_REG | "1:\trr %[2]"
- "djnz %[1], 1b"
- erase(%[2])
- setcc(%[2]) | %[2] | |
- /**/
- /***************************************
- ******** GROUP 10 ********
- ***************************************/
- inn $1==2 | REG SCR_REG | allocate( REG = {im2, 0} )
- "cp %[1], $$15"
- "jr UGT, 1f"
- "bit %[2], %[1]"
- "tcc NE, %[a]\n1:"
- erase(%[a]) nocc | %[a] | |
- inn defined($1) | src2 STACK | move( %[1], R1 )
- move( {im2, $1}, R2 )
- "calr inn"
- erase(R1)
- erase(R2) | R0 | |
- inn !defined($1)| src2 src2 STACK | move( %[1], R2 )
- move( %[2], R1 )
- "calr inn"
- erase(R1)
- erase(R2) | R0 | |
- loc inn $2==2 && $1==0 | SCR_REG |
- "and %[1], $$1"
- erase(%[1]) setcc(%[1]) | %[1] | |
- loc inn $2==2 && $1==1 | SCR_REG |
- "srl %[1]"
- "and %[1], $$1"
- erase(%[1]) setcc(%[1]) | %[1] | |
- loc inn $2==2 && $1>1 && $1<=16 | SCR_REG |
- "srl %[1], $$%(0-$1%)"
- "and %[1], $$1"
- erase(%[1]) setcc(%[1]) | %[1] | |
- loc inn zeq $2==2 | | | {im2, 1<<$1} | and 2 zeq $3 |
- inn zeq $1==2 | REG | allocate( REG = {im2, 1} )
- "sdl %[a], %[1]"
- erase(%[a])
- setcc(%[a]) | %[a] | and 2 zeq $2 |
- loc inn zne $2==2 | | | {im2, 1<<$1} | and 2 zne $3 |
- inn zne $1==2 | REG | allocate( REG = {im2, 1} )
- "sdl %[a], %[1]"
- erase(%[a])
- setcc(%[a]) | %[a] | and 2 zne $2 |
- set $1==2 | REG | allocate( REG = {im2, 0} )
- "cp %[1], $$15"
- "jr ULE, 1f"
- "push *RR14, $$ESET"
- "calr trp"
- "jr 2f"
- "1:\tset %[a], %[1]\n2:"
- erase(%[a]) nocc | %[a] | |
- set defined($1) | src2 STACK | move( %[1], R1 )
- move( {im2, $1}, R0 )
- "calr xset"
- erase(R0)
- erase(R1) | | |
- set !defined($1)| src2 src2 STACK | move( %[1], R0 )
- move( %[2], R1 )
- "calr xset"
- erase(R0)
- erase(R1) | | |
- /**/
- /***************************************
- ******** GROUP 11 ********
- ***************************************/
- aar $1==2 | src2 src2 STACK | move( %[1], R1 )
- move( %[2], R3 )
- "calr aar"
- erase(R1)
- erase(R3) | | |
- aar !defined($1)| src2c src2 src2 STACK | move( %[2], R1 )
- move( %[3], R3 )
- "cp %[1], $$2"
- "jr NE, unknown"
- "calr aar"
- erase(R1)
- erase(R3) | | |
- sar $1==2 | src2 src2 STACK | move( %[1], R1 )
- move( %[2], R3 )
- "calr sar"
- erase(R1)
- erase(R3) | | |
- sar !defined($1)| src2c src2 src2 STACK | move( %[2], R1 )
- move( %[3], R3 )
- "cp %[1], $$2"
- "jr NE, unknown"
- "calr sar"
- erase(R1)
- erase(R3) | | |
- lar $1==2 | src2 src2 STACK | move( %[1], R1 )
- move( %[2], R3 )
- "calr lar"
- erase(R1)
- erase(R3) | | |
- lar !defined($1)| src2c src2 src2 STACK | move( %[2], R1 )
- move( %[3], R3 )
- "cp %[1], $$2"
- "jr NE, unknown"
- "calr lar"
- erase(R1)
- erase(R3) | | |
- lae aar $2==2 && rom(1,3)==1 && rom(1,1)==0 | | | | adi 2 |
- lae aar $2==2 && rom(1,3)==1 && rom(1,1)!=0 | | | |
- adi 2 adp 0-rom(1,1) |
- lae aar $2==2 && rom(1,3)==2 && rom(1,1)==0 | SCR_REG |
- "sla %[1]"
- erase(%[1]) | %[1] | adi 2 |
- lae aar $2==2 && rom(1,3)==2 && rom(1,1)!=0 | SCR_XREG |
- "sla %[1]"
- erase(%[1])
- | {regconst2, %[1], (0-2)*rom(1,1)} | adi 2 |
- lae aar $2==2 && rom(1,3)==4 && rom(1,1)==0 | SCR_REG |
- "sla %[1], $$2"
- erase(%[1]) | %[1] | adi 2 |
- lae aar $2==2 && rom(1,3)==4 && rom(1,1)!=0 | SCR_XREG |
- "sla %[1], $$2"
- erase(%[1])
- | {regconst2, %[1], (0-4)*rom(1,1)} | adi 2 |
- lae aar $2==2 && rom(1,3)==8 && rom(1,1)==0 | SCR_REG |
- "sla %[1], $$3"
- erase(%[1]) | %[1] | adi 2 |
- lae aar $2==2 && rom(1,3)==8 && rom(1,1)!=0 | SCR_XREG |
- "sla %[1], $$3"
- erase(%[1])
- | {regconst2, %[1], (0-8)*rom(1,1)} | adi 2 |
- lae aar $2==2 && rom(1,1)==0 | src2 |
- allocate( %[1], LWREG )
- move( %[1], %[a.2] )
- "mult %[a], $$%(rom(1,3)%)"
- erase(%[a]) | %[a.2] | adi 2 |
- lae aar $2==2 && defined(rom(1,1)) | src2 |
- allocate( %[1], LWREG )
- move( %[1], %[a.2] )
- "mult %[a], $$%(rom(1,3)%)"
- erase(%[a])
- | {regconst2, %[a.2], (0-rom(1,3))*rom(1,1)} | adi 2 |
- lae sar defined(rom(1,3)) | | | | lae $1 aar $2 sti rom(1,3) |
- lae lar defined(rom(1,3)) | | | | lae $1 aar $2 loi rom(1,3) |
- /**/
- /***************************************
- ******** GROUP 12 ********
- ***************************************/
- cmi $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "jr EQ, 2f"
- "jr LT, 1f"
- "inc %[a]"
- "jr 2f"
- "1:\tdec %[a]\n2:"
- erase(%[a]) nocc | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "jr EQ, 2f"
- "jr LT, 1f"
- "inc %[a]"
- "jr 2f"
- "1:\tdec %[a]\n2:"
- erase(%[a]) nocc | %[a] | |
- cmi $1==4 | STACK | "calr cmi4" | R0 | |
- cmi !defined($1)| src2 STACK | move( %[1], R0 )
- "calr cmi"
- erase(R0) | R0 | |
- cmu $1==2 | | | | cmp |
- cmu $1==4 | STACK | "calr cmu4" | R0 | |
- cmu !defined($1)| src2 STACK | move( %[1], R0 )
- "calr cmu"
- erase(R0) | R0 | |
- cms $1==2 | | | | sbi $1 |
- cms defined($1) | STACK | move( {im2, $1}, R0 )
- "calr cms"
- erase(R0) | R0 | |
- cms !defined($1)| src2 STACK | move( %[1], R0 )
- "calr cms"
- erase(R0) | R0 | |
- cmp | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "jr EQ, 2f"
- "jr ULT, 1f"
- "inc %[a]"
- "jr 2f"
- "1:\tdec %[a]\n2:"
- erase(%[a]) nocc | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "jr EQ, 2f"
- "jr ULT, 1f"
- "inc %[a]"
- "jr 2f"
- "1:\tdec %[a]\n2:"
- erase(%[a]) nocc | %[a] | |
- tlt | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc LT, %[a]"
- erase(%[a]) samecc | %[a] | |
- tle | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc LE, %[a]"
- erase(%[a]) samecc | %[a] | |
- teq | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc EQ, %[a]"
- erase(%[a]) samecc | %[a] | |
- tne | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc NE, %[a]"
- erase(%[a]) samecc | %[a] | |
- tge | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc GE, %[a]"
- erase(%[a]) samecc | %[a] | |
- tgt | src2c | allocate( REG = {im2, 0} )
- test(%[1])
- "tcc GT, %[a]"
- erase(%[a]) samecc | %[a] | |
- cmp tlt | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc ULT, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc ULT, %[a]"
- erase(%[a]) | %[a] | |
- cmp tle | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc ULE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc ULE, %[a]"
- erase(%[a]) | %[a] | |
- cmp teq | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc EQ, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc EQ, %[a]"
- erase(%[a]) | %[a] | |
- cmp tne | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc NE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc NE, %[a]"
- erase(%[a]) | %[a] | |
- cmp tge | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc UGE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc UGE, %[a]"
- erase(%[a]) | %[a] | |
- cmp tgt | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc UGT, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc UGT, %[a]"
- erase(%[a]) | %[a] | |
- tlt and $2==2 | src2c SCR_REG | test(%[1])
- "jr LT, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- tlt ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc LT, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- tle and $2==2 | src2c SCR_REG | test(%[1])
- "jr LE, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- tle ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc LE, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- teq and $2==2 | src2c SCR_REG | test(%[1])
- "jr EQ, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- teq ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc EQ, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- tne and $2==2 | src2c SCR_REG | test(%[1])
- "jr NE, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- tne ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc NE, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- tgt and $2==2 | src2c SCR_REG | test(%[1])
- "jr GT, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- tgt ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc GT, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- tge and $2==2 | src2c SCR_REG | test(%[1])
- "jr GE, 1f"
- "ldk %[2], $$0\n1:"
- erase(%[2]) | %[2] | |
- tge ior $2==2 | src2c SCR_REG | test(%[1])
- "tcc GE, %[2]"
- samecc
- erase(%[2]) | %[2] | |
- cmi tlt and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr LT, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr LT, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi tlt ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc LT, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc LT, %[3]"
- erase(%[3]) | %[3] | |
- cmi tlt $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc LT, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc LT, %[a]"
- erase(%[a]) | %[a] | |
- cmi tle and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr LE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr LE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi tle ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc LE, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc LE, %[3]"
- erase(%[3]) | %[3] | |
- cmi tle $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc LE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc LE, %[a]"
- erase(%[a]) | %[a] | |
- cmi teq and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr EQ, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr EQ, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi teq ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc EQ, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc EQ, %[3]"
- erase(%[3]) | %[3] | |
- cmi teq $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc EQ, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc EQ, %[a]"
- erase(%[a]) | %[a] | |
- cmi tne and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr NE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr NE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi tne ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc NE, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc NE, %[3]"
- erase(%[3]) | %[3] | |
- cmi tne $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc NE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc NE, %[a]"
- erase(%[a]) | %[a] | |
- cmi tge and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr GE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr GE, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi tge ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc GE, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc GE, %[3]"
- erase(%[3]) | %[3] | |
- cmi tge $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc GE, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc GE, %[a]"
- erase(%[a]) | %[a] | |
- cmi tgt and $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "jr GT, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "jr GT, 1f"
- "ldk %[3], $$0\n1:"
- erase(%[3]) | %[3] | |
- cmi tgt ior $1==2 && $3==2 | src2 REG SCR_REG |
- "cp %[2], %[1]"
- "tcc GT, %[3]"
- erase(%[3]) | %[3] | |
- ... | NC im2 src2a SCR_REG | "cp %[2], %[1]"
- "tcc GT, %[3]"
- erase(%[3]) | %[3] | |
- cmi tgt $1==2 | src2 REG | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc GT, %[a]"
- erase(%[a]) | %[a] | |
- ... | NC im2 src2a | allocate( REG = {im2, 0} )
- "cp %[2], %[1]"
- "tcc GT, %[a]"
- erase(%[a]) | %[a] | |
- /**/
- /***************************************
- ******** GROUP 13 ********
- ***************************************/
- bra | STACK | "jr $1" samecc | | |
- blt | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr LT, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr LT, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr GT, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr GT, $1" | | |
- ble | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr LE, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr LE, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr GE, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr GE, $1" | | |
- beq | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr EQ, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr EQ, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr EQ, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr EQ, $1" | | |
- bne | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr NE, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr NE, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr NE, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr NE, $1" | | |
- bge | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr GE, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr GE, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr LE, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr LE, $1" | | |
- bgt | src2 REG | remove( ALL )
- "cp %[2], %[1]"
- "jr GT, $1" | | | (4,10)+%[1]
- ... | NC im2 src2a | remove( ALL )
- "cp %[2], %[1]"
- "jr GT, $1" | | |
- ... | REG src2 | remove( ALL )
- "cp %[1], %[2]"
- "jr LT, $1" | | | (4,10)+%[2]
- ... | NC src2a im2 | remove( ALL )
- "cp %[1], %[2]"
- "jr LT, $1" | | |
- zlt | src2c | remove( ALL )
- test(%[1])
- "jr LT, $1"
- samecc | | |
- zle | src2c | remove( ALL )
- test(%[1])
- "jr LE, $1"
- samecc | | |
- zeq | src2c | remove( ALL )
- test(%[1])
- "jr EQ, $1"
- samecc | | |
- zne | src2c | remove( ALL )
- test(%[1])
- "jr NE, $1"
- samecc | | |
- zge | src2c | remove( ALL )
- test(%[1])
- "jr GE, $1"
- samecc | | |
- zgt | src2c | remove( ALL )
- test(%[1])
- "jr GT, $1"
- samecc | | |
- cmp zlt | src2 REG STACK | "cp %[2], %[1]"
- "jr ULT, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr ULT, $2" | | |
- cmp zle | src2 REG STACK | "cp %[2], %[1]"
- "jr ULE, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr ULE, $2" | | |
- cmp zeq | src2 REG STACK | "cp %[2], %[1]"
- "jr EQ, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr EQ, $2" | | |
- cmp zne | src2 REG STACK | "cp %[2], %[1]"
- "jr NE, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr NE, $2" | | |
- cmp zgt | src2 REG STACK | "cp %[2], %[1]"
- "jr UGT, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr UGT, $2" | | |
- cmp zge | src2 REG STACK | "cp %[2], %[1]"
- "jr UGE, $2" | | |
- ... | NC im2 src2a STACK | "cp %[2], %[1]"
- "jr UGE, $2" | | |
- and zeq $1==2 | src2 SCR_REG STACK | "and %[2], %[1]"
- "jr EQ, $2"
- erase(%[2]) | | | (4,10)+%[1]
- ... | SCR_REG src2 STACK | "and %[1], %[2]"
- "jr EQ, $2"
- erase(%[1]) | | | (4,10)+%[2]
- and zne $1==2 | src2 SCR_REG STACK | "and %[2], %[1]"
- "jr NE, $2"
- erase(%[2]) | | | (4,10)+%[1]
- ... | SCR_REG src2 STACK | "and %[1], %[2]"
- "jr NE, $2"
- erase(%[1]) | | | (4,10)+%[2]
- /**/
- /***************************************
- ******** GROUP 14 ********
- ***************************************/
- cal | STACK | "calr $1" | | |
- cai | NC src2a-x2 STACK | "call %[1]" | | |
- ... | NC x2 STACK | allocate( %[1], XREG = %[1] )
- "call 0(%[a])" | | |
- ... | XREG STACK | "call 0(%[1])" | | |
- lfr $1==0 | | | | |
- lfr $1==2 | | | R0 | |
- lfr $1==4 | | | RR0 | |
- lfr $1==6 | | | R2 R1 R0 | |
- lfr $1==8 | | | RR2 RR0 | |
- ret $1==0 | STACK | "ldk R14, $$0\nld R15, R13"
- "pop R13, *RR14"
- "ret" | | |
- ret $1==2 | src2 STACK | move( %[1], R0 )
- "ldk R14, $$0\nld R15, R13"
- "pop R13, *RR14"
- "ret" | | |
- ret $1==4 | src4 STACK | move( %[1], RR0 )
- "ldk R14, $$0\nld R15, R13"
- "pop R13, *RR14"
- "ret" | | |
- ret $1==6 | src2 src2 src2 STACK | move( %[1], R0 )
- move( %[2], R1 )
- move( %[3], R2 )
- "ldk R14, $$0\nld R15, R13"
- "pop R13, *RR14"
- "ret" | | |
- ret $1==8 | src4 src4 STACK | move( %[1], RR0 )
- move( %[2], RR2 )
- "ldk R14, $$0\nld R15, R13"
- "pop R13, *RR14"
- "ret" | | |
- lfr ret $1==$2 | | | | ret 0 |
- asp lfr ret $2==$3 | | | | ret 0 |
- asp ret $2==0 | | | | ret 0 |
- /**/
- /***************************************
- ******** GROUP 15 ********
- ***************************************/
- asp | STACK | "add R15, $$$1" | | |
- ass $1==2 | src2 STACK | "add R15, %[1]" | | |
- blm | STACK | move( {im2, $1}, R0 )
- "calr blm"
- erase(R0) | | |
- bls $1==2 | src2 STACK | move( %[1], R0 )
- "calr blm"
- erase(R0) | | |
- csa $1==2 | STACK | "pop R1, *RR14"
- "pop R2, *RR14"
- "jr csa" | | |
- lae csa $2==2 | src2 STACK | move( %[1], R2 )
- move( {ADDR_EXTERNAL, $1}, R1 )
- "jr csa" | | |
- csb $1==2 | STACK | "pop R1, *RR14"
- "pop R2, *RR14"
- "jr csb" | | |
- lae csb $2==2 | src2 STACK | move( %[1], R2 )
- move( {ADDR_EXTERNAL, $1}, R1 )
- "jr csb" | | |
- dup $1==2 | src2 | | %[1] %[1] | |
- dup $1==4 | src2 src2 | | %[2] %[1] %[2] %[1] | |
- dup | STACK | move( {im2, $1}, R0 )
- "calr dup"
- erase(R0) | | |
- dus $1==2 | src2 STACK | move( %[1], R0 )
- "calr dup"
- erase(R0) | | |
- exg $1==2 | src2 src2 | | %[1] %[2] | |
- exg $1==2 | STACK | move( {im2, $1}, R0 )
- "calr exg"
- erase(R0) | | |
- lor $1==0 | | | LB | |
- lor $1==1 | STACK | allocate( REG )
- "ld %[a], R15"
- samecc | %[a] | |
- lor $1==2 | | | {da2, "reghp"} | |
- rck $1==2 | src2 STACK | move( %[1], R1 )
- "calr rck" | | |
- rck !defined($1)| src2 src2 STACK | "cp %[1], $$2"
- "jr NE, unknown"
- move( %[2], R1 )
- "calr rck" | | |
- str $1==0 | src2 | "ld R13, %[1]" samecc | | |
- str $1==1 | src2 STACK | "ldk R14, $$0\nld R15, %[1]"
- samecc | | |
- str $1==2 | STACK | "calr strhp" | | |
- dch | | | | loi 2 |
- fil | | "ld hol0+4, $$$1" samecc | | |
- gto | STACK | "push *RR14, $$$1"
- "jr gto" | | |
- lim | | | {da2, "trpim"} | |
- lin | | "ld hol0, $$$1" samecc | | |
- lni | | "inc hol0" | | |
- lpb | | | | adp SL |
- mon | STACK | "calr mon" | | |
- nop | STACK |
- #ifdef DEBUG
- "calr noop"
- #endif
- | | |
- rtt | | | | ret 0 |
- sig | REG | allocate(REG)
- move( {da2, "trppc"}, %[a] )
- "ld trppc, %[1]"
- samecc | %[a] | |
- sim | STACK | "pop trpim, *RR14"
- samecc | | |
- trp | STACK | "calr trp" | | |
- /* For several floating point instructions we generate an illegal
- ** instruction trap
- */
- adf | | | | loc 18 trp |
- sbf | | | | loc 18 trp |
- mlf | | | | loc 18 trp |
- dvf | | | | loc 18 trp |
- ngf | | | | loc 18 trp |
- fef | | | | loc 18 trp |
- fif | | | | loc 18 trp |
- zrf | | | | loc 18 trp |
- cfi | | | | loc 18 trp |
- cif | | | | loc 18 trp |
- cfu | | | | loc 18 trp |
- cuf | | | | loc 18 trp |
- cff | | | | loc 18 trp |
- cmf | | | | loc 18 trp |
- /**/
- /* COERCIONS */
- /*********************************
- ** From source2 to register **
- *********************************/
- | regconst2 | allocate( %[1], XREG = %[1.xreg] )
- "add %[a], $$%[1.ind]"
- setcc(%[a]) | %[a] | | (4,7)
- | ADDR_LOCAL | allocate( REG )
- "ld %[a], R13"
- "add %[a], $$%[1.ind]"
- setcc(%[a]) | %[a] | | (6,10)
- | REG | allocate( %[1], XREG = %[1] ) | {regconst2, %[a], 0} | |
- | src2 | allocate( %[1], REG = %[1] ) | %[a] | |
- | src2 | allocate( %[1], XREG = %[1] ) | {regconst2, %[a], 0} | |
- /*********************************
- ** From source2 to source2 **
- *********************************/
- | ADDR_EXTERNAL | | {da2, %[1.ind]} | |
- /*********************************
- ** From source1 to source2 **
- *********************************/
- | src1 | allocate( %[1], B2REG = %[1] ) | %[a] | |
- /*********************************
- ** From source4 to register **
- *********************************/
- | src4 | allocate( %[1], LWREG = %[1] ) | %[a] | |
- /*********************************
- ** From source4 to source2 **
- *********************************/
- | LWREG | | %[1.2] %[1.1] | |
- | x4 | | {x2, %[1.xreg], 2+%[1.ind]} {x2, %[1.xreg], %[1.ind]} | |
- | da4 | | {da2, "2+"+%[1.ind]} {da2, %[1.ind]} | |
- | ir4 | | {ir4_hi, %[1.lwxreg]} {ir2, %[1.lwxreg]} | |
- | ir4_hi | allocate( LWREG = %[1.lwreg] ) | {x2, %[a.2], 2} | |
- /*********************************
- ** From STACK **
- *********************************/
- | STACK | allocate( REG )
- "pop %[a], *RR14"
- samecc | %[a] | | (2,8)
- | STACK | allocate( XREG )
- "pop %[a], *RR14"
- samecc | {regconst2, %[a], 0} | | (2,8)
- | STACK | allocate( LWREG )
- "popl %[a], *RR14"
- samecc | %[a] | | (2,12)
- MOVES:
- /* move( src, dst ) --> ld dst, src */
- (im2 (%[num]>=0 && %[num]<=15), REG, "ldk %[2], %[1]" samecc, (2,5))
- (im2 %[num]==0, src2a, "clr %[2]" samecc, (2,7)+%[2])
- (im2 %[num]==0, src1, "clrb %[2]" samecc, (2,7)+%[2])
- (im2, src1, "ldb %[2], $$[%[1.num]-[%[1.num]&0xFFFFFF00]+128]%%256-128"
- samecc, (4,9)+%[2])
- (src1, B2REG, "ldk %[2], $$0\nldb L%[2], %[1]" samecc, (4,8)+%[1])
- (src2, REG, "ld %[2], %[1]" samecc, (2,3)+%[1])
- (src4, LWREG, "ldl %[2], %[1]" samecc, (2,5)+%[1])
- (const2, src1, "ldb %[2], %[1]" samecc, (4,9)+%[2])
- (B2REG, src1, "ldb %[2], L%[1]" samecc, (2,6)+%[2])
- (src2b, src2a, "ld %[2], %[1]" samecc, (2,6)+%[1]+%[2])
- (src4b, src4a, "ldl %[2], %[1]" samecc, (2,6)+%[2])
- TESTS:
- (src2c, "test %[1]", (2,7)+%[1])
- STACKS:
- (src1, B2REG, move( %[1], %[a] )
- "push *RR14, %[a]"
- "clrb *RR14"
- samecc, (4,17) )
- (src1,, ".sect data\n1:\t.data2 0\n.text"
- "ld 1b, R0"
- "ldk R0, $$0"
- "ldb RL0, %[1]"
- "push *RR14, R0"
- "ld R0, 1b"
- samecc, (18,37)+%[1] )
- (src2,, "push *RR14, %[1]"
- samecc, (2,9)+%[1] )
- (const4, LWREG, move( %[1], %[a] )
- "pushl *RR14, %[a]"
- samecc, (2,12) )
- (im4,, "push *RR14, %[1]"
- "push *RR14, $$0"
- samecc, (8,24) ) /* there is no pushl ir,im */
- (double,, ".sect .data\n1:\t.data4 %[1]\n.text"
- "pushl *RR14, 1b"
- samecc, (6,20) )
- (src4,, "pushl *RR14, %[1]"
- samecc, (2,12)+%[1] )
- (regconst2,, "add %[1.xreg], $$%[1.ind]"
- "push *RR14, %[1.xreg]"
- nocc, (6,16) )
- (ADDR_LOCAL, REG,
- move( LB, %[a] )
- "add %[a], $$%[1.ind]"
- "push *RR14, %[a]"
- setcc(%[a]), (6,16) )
- (ADDR_LOCAL,, "add R13, $$%[1.ind]"
- "push *RR14, R13"
- "sub R13, $$%[1.ind]"
- nocc, (10,23) )
|