ack/mach/z8000/cg/table

1854 lines
55 KiB
Plaintext
Raw Normal View History

"$Header$"
1984-07-13 11:25:46 +00:00
#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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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 lol adp stl $1==$2 && $2==$4 && $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 lol adp stl $1==$2 && $2==$4 && $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"
1984-07-13 11:25:46 +00:00
setcc({x2, LB, $1}) | %[a] | |
loe loe adp ste $1==$2 && $2==$4 && $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 loe adp ste $1==$2 && $2==$4 && $3<0 && $3>=0-16 | |
allocate( REG = {da2, $1} )
remove( da )
remove( indexed, %[xreg]!=LB )
remove( ind_access )
"dec $1, $$0-$3"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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"
1984-07-13 11:25:46 +00:00
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 ********
***************************************/
1988-03-14 13:56:33 +00:00
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] | |
1984-07-13 11:25:46 +00:00
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 | "calr noop" | | |
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,, ".data\n1:\t.word 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,, ".data\n1:\t.long %[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) )