2.11BSD/src/lib/ccom/optable
%{
/*
* c code tables-- compile to register
*/
#if !defined(lint) && defined(DOSCCS)
static char sccsid[] = "@(#)optable 2.1 (2.11BSD GTE) 10/4/94";
#endif
struct table regtab[] = {
{106,cr106},
{30,cr70},
{31,cr70},
{32,cr32},
{33,cr32},
{37,cr37},
{38,cr37},
{98,cr100},
{99,cr100},
{80,cr80},
{40,cr40},
{41,cr40 /* - like + */},
{42,cr42},
{43,cr43},
{14,cr14},
{44,cr43},
{45,cr45},
{46,cr40},
{55,cr40},
{48,cr40},
{49,cr49},
{70,cr70},
{71,cr70},
{72,cr72},
{73,cr73},
{74,cr74},
{75,cr75},
{76,cr72},
{78,cr78}, /* |= */
{85,cr78}, /* &= */
{79,cr79},
{102,cr102},
{51,cr51},
{52,cr52},
{56,cr56},
{57,cr57},
{58,cr58},
{59,cr59},
{91,cr91},
{82,cr82},
{83,cr82},
{84,cr82},
{86,cr86},
{87,cr86},
{88,cr86},
{16,cr16},
{92,cr92},
{17,cr43},
{18,cr74},
{109,cr109},
{117,cr117},
{118,cr117},
{119,cr119},
{120,cr119},
{107,cr107},
{121,cr121},
{122,cr121},
{123,cr121},
{124,cr124},
{125,cr124},
{126,cr124},
{127,cr127},
{128,cr128},
{129,cr129},
{0}
};
%}
/* goto */
cr102:
%a,n
jmp A1
%n*,n
F*
jmp #1(R)
/* call */
cr100:
%a,n
jsr pc,IA1
%n*,n
F*
jsr pc,#1(R)
%n,n
F
jsr pc,(R)
/* addressible */
cr106:
%z,n
clr R
%zf,n
clrf R
%aub,n
clr R
bisb A1,R
%a,n
%ad,n
movB1 A1,R
%af,n
movof A1,R
%nub*,n
F*
movb #1(R),R
bic $!377,R
%n*,n
%nd*,n
F*
movB1 #1(R),R
%nf*,n
F*
movof #1(R),R
%al,n
%aul,n
mov A1+,R+
mov A1,R
%nl*,n
%nul*,n
F*
mov #1+2(R),R+
mov #1(R),R
%n,n
F
/* ++,-- postfix */
cr32:
%a,1
movB1 A1',R
I'B1 A1''
%aw,n
mov A1',R
I A2,A1''
%aub,n
clr R
bisb A1',R
I'b A1''
%e*,1
F1*
movB1 #1(R1),R
I'B1 #1(R1)
%n*,1
F*
movB1 #1(R),-(sp)
I'B1 #1(R)
movB1 (sp)+,R
%ew*,n
F1*
mov #1(R1),R
I A2,#1(R1)
%eub*,n
F1*
clr R
bisb #1(R1),R
I'b #1(R1)
%nw*,n
F*
mov #1(R),-(sp)
I A2,#1(R)
mov (sp)+,R
%nub*,n
F*
movb (R),-(sp)
I'b (R)
clr R
bisb (sp)+,R
%al,1
%aul,1
F
I $1,A1+
V A1
%el*,1
%eul*,1
F1*
mov #1+2(R1),R+
mov #1(R1),R
I $1,#1+2(R1)
V #1(R1)
%nl*,1
%nul*,1
F*
mov #1+2(R),-(sp)
mov #1(R),-(sp)
I $1,#1+2(R)
V #1(R)
mov (sp)+,R
mov (sp)+,R+
/* - unary, ~ */
cr37:
%n,n
%nf,n
F
IBF R
%nl,n
%nul,n
F
I R
I R+
V R
/* = */
cr80:
%a,n
%ad,nf
S
movB1 R,A1
%aub,n
S
movB1 R,A1
bic $!377,R
%af,nf
S
movfo R,A1
%nd*,af
F*
S
movf R,#1(R)
%n*,aw
F*
movB1 A2,#1(R)
movB1 #1(R),R
%nf*,af
F*
S
movfo R,#1(R)
%n*,e
F*
S1
movB1 R1,#1(R)
movB1 R1,R
%nub*,e
F*
S1
movB1 R1,#1(R)
clr R
bisb R1,R
%ed*,nf
S
F1*
movf R,#1(R1)
%ef*,nf
S
F1*
movfo R,#1(R1)
%n*,n
%nd*,nf
FS*
S
movB1 R,*(sp)+
%nub*,n
FS*
S
movB1 R,*(sp)+
bic $!377,R
%nf*,nf
FS*
S
movfo R,*(sp)+
%al,nl
%al,nul
%aul,nl
%aul,nul
S
mov R+,A1+
mov R,A1
%el*,nl
%el*,nul
%eul*,nl
%eul*,nul
S
F1*
mov R+,2+#1(R1)
mov R,#1(R1)
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
FS*
S
mov R,*(sp)
add $2,(sp)
mov R+,*(sp)+
/* field assign, value in reg. */
cr16:
%a,n
S
bicB1 Z,A1'
bisB1 R,A1''
%e*,n
% [fas1]
%n*,n
SS
F*
bicB1 Z,#1(R)
bisB1 (sp),#1(R)
mov (sp)+,R
/* +, -, |, &~, << */
cr40:
%n,z
F
%n,1
F
I' R
%[add1:]
%n,aw
%nf,ad
F
IB2 A2,R
%[add2:]
%n,ew*
%nf,ed*
F
S1*
IB2 #2(R1),R
%[add3:]
%n,e
%nf,ef
F
S1
IBF R1,R
%[add4:]
%n,nw*
%nf,nd*
SS*
F
IB2 *(sp)+,R
%[add5:]
%n,n
%nf,nf
SS
F
IBF (sp)+,R
%nl,c
%nl,au
%nul,c
%nul,au
F
I A2,R+
V R
%nl,eu
%nul,eu
F
S1
I R1,R+
V R
%nl,al
%nl,aul
%nul,al
%nul,aul
F
I A2,R
I A2+,R+
V R
%[addl1:]
%nl,el
%nl,eul
%nul,el
%nul,eul
F
S1
I R1+,R+
V R
I R1,R
%[addl2:]
%nl,nl
%nl,nul
%nul,nl
%nul,nul
SS
F
I (sp)+,R
I (sp)+,R+
V R
/* ^ -- xor */
cr49:
%n,e
% [add3]
%n,n
FS
S
xor R,(sp)
mov (sp)+,R
%nl,el
%nl,eul
%nul,el
%nul,eul
% [addl1]
%nl,nl
%nl,nul
%nul,nl
%nul,nul
SS
F
I R,(sp)
mov (sp)+,R
I R+,(sp)
mov (sp)+,R+
/* >> (all complicated cases taken care of by << -) */
cr45:
%n,1
F
asr R
/* * -- R must be odd on integers */
cr42:
%n,aw
%nf,ad
% [add1]
%n,ew*
%nf,ed*
% [add2]
%n,e
%nf,ef
% [add3]
%n,n
%nf,nf
% [add5]
/* / and >> R must be odd on integers */
cr43:
%n,aw
F
T
I A2,R-
%n,ew*
F
T
S1*
I #2(R1),R-
%n,e
F
T
S1
I R1,R-
%n,n
SS
F
T
I (sp)+,R-
%nf,ad
% [add1]
%nf,ed*
% [add2]
%nf,ef
% [add3]
%nf,nf
% [add5]
/* PTOI */
cr14:
%nl,a
%nul,a
F!
div A2,R
/* =+, =- */
cr70:
%[addq1:]
%aw,aw
I A2,A1'
mov A1'',R
%[addq20:]
%aub,aw
clr R
bisb A1',R
I A2,R
movb R,A1''
bic $!377,R
%[addq1a:]
%a,aw
%ad,ad
movB1 A1',R
IBF A2,R
movB1 R,A1''
%[addq2:]
%aw,nw*
S*
I #2(R),A1'
mov A1'',R
%[addq3:]
%aw,n
S
I R,A1'
mov A1'',R
%[addq21:]
%aub,n
SS
clr R
bisb A1',R
I (sp)+,R
movb R,A1''
bic $!377,R
%[addq4:]
%ew*,nw*
S*
F1*
I #2(R),#1(R1)
mov #1(R1),R
%[addq4a:]
%ad,ef
movf A1',R
S1
IBF R1,R
movf R,A1''
%[addq5:]
%a,n
%ad,nf
SS
movB1 A1',R
IBF (sp)+,R
movB1 R,A1''
%[addq6:]
%af,nf
SS
movof A1',R
IBF (sp)+,R
movfo R,A1''
%[addq7:]
%ew*,n
S
F1*
I R,#1(R1)
mov #1(R1),R
%[addq8:]
%nw*,n
SS
F*
I (sp)+,#1(R)
mov #1(R),R
%[addq9:]
%n*,n
FS*
SS
movB1 *2(sp),R
IBF (sp)+,R
movB1 R,*(sp)+
%[addq22:]
%nub*,n
FS*
SS
clr R
bisb *2(sp),R
I (sp)+,R
movb R,*(sp)+
bic $!377,R
%[addq9a:]
%nd*,nf
SS
F*
movB1 #1(R),R
IBF (sp)+,R
movB1 R,#1(R)
%[addq10:]
%nf*,nf
SS
F*
movof #1(R),R1
IBF (sp)+,R1
movfo R1,#1(R)
movf R1,R
%[addq11:]
%al,c
%aul,c
I A2,A1+
V A1
F
%[addq12:]
%al,al
%al,aul
%aul,al
%aul,aul
I A2+,A1+
V A1
I A2,A1
F
%[addq13:]
%al,nl
%al,nul
%aul,nl
%aul,nul
S
I R+,A1+
V A1
I R,A1
F
%[addq14:]
%nl*,c
%nul*,c
F*
I A2,#1+2(R)
V #1(R)
mov #1+2(R),R+
mov #1(R),R
%[addq15:]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
F*
I A2+,#1+2(R)
V #1(R)
I A2,#1(R)
mov #1+2(R),R+
mov #1(R),R
%[addq16:]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
SS
F*
I (sp)+,#1(R)
I (sp)+,#1+2(R)
V #1(R)
mov #1+2(R),R+
mov #1(R),R
/* *=, <<= (for integer multiply, R must be odd) */
cr72:
%a,aw
%ad,ad
% [addq1a]
%ad,ef
% [addq4a]
%a,n
%ad,nf
% [addq5]
%af,nf
% [addq6]
%aub,aw
% [addq20]
%aub,n
% [addq21]
%n*,n
% [addq9]
%nub*,n
% [addq22]
%nd*,nf
% [addq9a]
%nf*,nf
% [addq10]
/* =/ ; R must be odd on integers */
cr73:
%a,aw
movB1 A1',R
V R-
IBF A2,R-
movB1 R-,A1''
%a,n
SS
movB1 A1',R
V R-
I (sp)+,R-
movB1 R-,A1''
%aub,n
SS
clr R
bisB1 A1',R
V R-
I (sp)+,R-
movB1 R-,A1''
bic $!377,R-
%e*,n
SS
F1*
movB1 #1(R1),R
V R-
I (sp)+,R-
movB1 R-,#1(R1)
%n*,n
FS*
SS
movB1 *2(sp),R
V R-
I (sp)+,R-
movB1 R-,*(sp)+
%nub*,n
FS*
SS
clr R
bisB1 *2(sp),R
V R-
I (sp)+,R-
movB1 R-,*(sp)+
bic $!377,R-
%ad,ad
% [addq1a]
%ad,ef
% [addq4a]
%ad,nf
% [addq5]
%af,nf
% [addq6]
%nd*,nf
% [addq9a]
%nf*,nf
% [addq10]
/* >>= and =mod; R must be odd on integers */
cr74:
%a,aw
movB1 A1',R
V R-
I A2,R-
movB1 R,A1''
%a,n
SS
movB1 A1',R
V R-
I (sp)+,R-
movB1 R,A1''
%aub,n
SS
clr R
bisB1 A1',R
V R-
I (sp)+,R-
movB1 R,A1''
bic $!377,R
%e*,n
SS
F1*
movB1 #1(R1),R
V R-
I (sp)+,R-
movB1 R,#1(R1)
%n*,n
FS*
SS
movB1 *2(sp),R
V R-
I (sp)+,R-
movB1 R,*(sp)+
%nub*,n
FS*
SS
clr R
bisB1 *2(sp),R
V R-
I (sp)+,R-
movB1 R,*(sp)+
bic $!377,R
/* =^ -- =xor */
cr79:
%aw,n
% [addq3]
%ab,n
SS
movb A1',R
xor R,(sp)
mov (sp)+,R
movb R,A1''
%aub,n
SS
movb A1',R
xor R,(sp)
clr R
bisb (sp)+,R
movb R,A1''
%n*,n
FS*
movB1 *(sp),-(sp)
S
xor R,(sp)
movB1 (sp)+,R
movB1 R,*(sp)+
%nub*,n
FS*
clr -(sp)
bisb *2(sp),(sp)
S
xor R,(sp)
mov (sp)+,R
movb R,*(sp)+
bic $!377,R
/* =>> (all complicated cases done by =<< -) */
cr75:
%a,1
asrB1 A1'
movB1 A1'',R
%n*,1
F*
asrB1 #1(R)
movB1 #1(R),R
/* =|, =&~ */
cr78:
%aw,aw
% [addq1]
%aub,a
IBE A2,A1'
clr R
bisb A1'',R
%a,aw
%ad,ad
% [addq1a]
%aw,nw*
% [addq2]
%aw,n
% [addq3]
%aub,n
SS
IBE (sp)+,A1'
clr R
bisb A1'',R
%ew*,nw*
% [addq4]
%ad,ef
% [addq4a]
%a,n
%ad,nf
% [addq5]
%af,nf
% [addq6]
%ew*,n
% [addq7]
%nw*,n
% [addq8]
%n*,n
% [addq9]
%nub*,n
FS*
SS
IBE (sp),*2(sp)
tst (sp)+
clr R
bisb *(sp)+,R
%nd*,nf
% [addq9a]
%nf*,nf
% [addq10]
%al,c
%aul,c
% [addq11]
%al,al
%al,aul
%aul,al
%aul,aul
% [addq12]
%al,nl
%al,nul
%aul,nl
%aul,nul
% [addq13]
%nl*,c
%nul*,c
% [addq14]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
% [addq15]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
% [addq16]
/* << for longs */
cr91:
%nl,aw
%nul,aw
% [add1]
%nl,ew*
%nul,ew*
% [add2]
%nl,e
%nul,e
% [add3]
%nl,nw*
%nul,nw*
% [add4]
%nl,n
%nul,n
% [add5]
/* >> for unsigned long */
cr128:
%nl,n
%nul,n
SS
F
jsr pc,I
tst (sp)+
/* >>= for unsigned long */
cr129:
%n,n
SS
FS
jsr pc,I
cmp (sp)+,(sp)+
/* int -> float */
cr51:
%aw,n
movif A1,R
%nw*,n
F*
movif #1(R),R
%n,n
F
movif R,R
/* float, double -> int */
cr52:
%nf,n
F
movfi R,R
/* double (float) to long */
cr56:
%nf,n
F
setl
movfi R,-(sp)
mov (sp)+,R
mov (sp)+,R+
seti
/* long to double */
cr57:
%al,n
setl
movif A1,R
seti
%nl*,n
F*
setl
movif #1(R),R
seti
%nl,n
FS
setl
movif (sp)+,R
seti
/* unsigned long to float(double) */
cr127:
%aul,n
mov A1+,-(sp)
mov A1,-(sp)
jsr pc,I
cmp (sp)+,(sp)+
%nul*,n
F*
mov #1+2(R),-(sp)
mov #1(R),-(sp)
jsr pc,I
cmp (sp)+,(sp)+
%nul,n
FS
jsr pc,I
cmp (sp)+,(sp)+
/* integer to long */
cr58:
%eu,n
F1!
clr R
%nu,n
F
mov R,R1
clr R
%e,n
F1!
sxt R
%n,n
F
mov R,R1
sxt R
/* long to integer */
cr59:
%al,n
%aul,n
mov A1+,R
%nl*,n
%nul*,n
F*
mov #1+2(R),R
/* *, /, remainder for longs. */
cr82:
%[l82:]
%nl,nl
%nl,nul
%nul,nl
%nul,nul
SS
FS
jsr pc,I
add $10,sp
/* *, /, rem for unsigned long */
cr121:
%nul,nl
%nl,nul
%nul,nul
% [l82]
/* *=, /=, %= for unsigned long */
cr124:
%n,nl
%n,nul
%nl,n
%nul,n
% [l86]
/* *=, /=, %= for longs */
/* Operands of the form &x op y, so stack space is known. */
cr86:
%[l86:]
%n,nl
%n,nul
SS
FS
jsr pc,I
add $6,sp
/* convert integer to character (sign extend) */
cr109:
%n,n
F
movb R,R
/* divide, remainder for unsigned */
cr117:
%n,e
F!
S1!
jsr pc,I
%n,n
SS
F!
mov (sp)+,R1
jsr pc,I
/* /= mod for unsigned */
cr119:
%aw,e
%ab,e
movB1 A1',R
S1!
jsr pc,I
movB1 R,A1''
%aub,e
clr R
bisB1 A1',R
S1!
jsr pc,I
movb R,A1''
%aw,n
%ab,n
SS
movB1 A1',R
mov (sp)+,R1
jsr pc,I
movB1 R,A1''
%nw*,n
%nb*,n
FS*
S!
mov R,R1
movB1 *(sp),R
jsr pc,I
movB1 R,*(sp)+
%aub,n
SS
clr R
bisB1 A1',R
mov (sp)+,R1
jsr pc,I
movB1 R,A1''
%nub*,n
FS*
S!
mov R,R1
clr R
bisb *(sp),R
jsr pc,I
movB1 R,*(sp)+
/* (int *) - (int *) */
cr107:
%n,n
F?
ror R
%{
/*
* c code tables -- compile for side effects.
* Also set condition codes properly (except for ++, --)
*/
struct table efftab[] = {
{30,ci70},
{31,ci70},
{32,ci70},
{33,ci70},
{80,ci80},
{70,ci70},
{71,ci70 /* - like + */},
{78,ci78},
{79,ci79},
{85,ci78},
{75,ci75},
{76,ci76},
{16,ci16},
{116,ci116},
{0}
};
%}
/* = */
ci80:
%[move1:]
%a,z
%ad,zf
%aub,z
I'B1 A1
%[move2:]
%n*,z
%nd*,zf
%nub*,z
F*
I'B1 #1(R)
%[move3:]
%a,aw
%ab,a
%ab,aub
%aub,a
%aub,ab
IBE A2,A1
%[move4:]
%ab,n*
%a,nw*
%aub,n*
S*
IBE #2(R),A1
%[move5:]
%a,n
%aub,n
S
IB1 R,A1
%[move6:]
%n*,aw
%nb*,a
%nub*,a
F*
IBE A2,#1(R)
%[move7:]
%n*,ew*
%nb*,e*
%nub*,e*
F*
S1*
IBE #2(R1),#1(R)
%[move8:]
%n*,e
%nub*,e
F*
S1
IB1 R1,#1(R)
%[move9:]
%e*,nw*
%eb*,n*
%eub*,n*
S*
F1*
IBE #2(R),#1(R1)
%[move10:]
%e*,n
%eub*,n
S
F1*
IB1 R,#1(R1)
%[move11:]
%n*,nw*
%nb*,n*
%nub*,n*
FS*
S*
IBE #2(R),*(sp)+
%[move12:]
%n*,n
%nub*,n
FS*
S
IB1 R,*(sp)+
%aw,nf
S
movfi R,A1
%ew*,nf
S
F1*
movfi R,#1(R1)
%al,z
%aul,z
clr A1
clr A1+
%nl*,z
%nul*,z
F*
clr #1(R)
clr 2+#1(R)
%[move13a:]
%al,aw
%aul,aw
I A2,A1+
V A1
%al,nw*
%aul,nw*
S*
mov #2(R),A1+
V A1
%al,n
%aul,n
S
mov R,A1+
V A1
%al,nf
%aul,nf
S
setl
movfi R,A1
seti
%el*,nf
%eul*,nf
S
F1*
setl
movfi R,#1(R1)
seti
%[move13:]
%al,al
%al,aul
%aul,al
%aul,aul
I A2,A1
I A2+,A1+
V A1
%[move14:]
%al,nl*
%al,nul*
%aul,nl*
%aul,nul*
S*
I #2(R),A1
I #2+2(R),A1+
V A1
%[move15:]
%al,nl
%al,nul
%aul,nl
%aul,nul
S
I R,A1
I R+,A1+
V A1
%[move14a:]
%nl*,aw
%nul*,aw
F*
I A2,#1+2(R)
V #1(R)
%[move16a:]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
F*
I A2+,#1+2(R)
V #1(R)
I A2,#1(R)
%[move16:]
%el*,nl
%el*,nul
%eul*,nl
%eul*,nul
S
F1*
I R+,#1+2(R1)
V #1(R1)
I R,#1(R1)
%nl*,n
%nul*,n
SS
F*
mov (sp)+,#1+2(R)
V #1(R)
%[move17:]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
SS
F*
I (sp)+,#1(R)
I (sp)+,#1+2(R)
V #1(R)
/* =| and =& ~ */
ci78:
%a,a
%a,ab
%a,aub
%ab,a
%ab,ab
%ab,aub
%aub,a
%aub,ab
%aub,aub
% [move3]
%aub,n
S
IBE R,A1
%a,n
% [move5]
%n*,aw
%nb*,a
%nub*,a
% [move6]
%n*,ew*
%nb*,e*
%nub*,e*
% [move7]
%n*,e
% [move8]
%e*,nw*
%eb*,n*
%eub*,n*
% [move9]
%e*,n
% [move10]
%n*,nw*
%nb*,n*
%nub*,n*
% [move11]
%n*,n
% [move12]
%al,c
%al,au
%aul,c
%aul,au
% [move13a]
%al,al
%al,aul
%aul,al
%aul,aul
% [move13]
%al,nl*
%al,nul*
%aul,nl*
%aul,nul*
% [move14]
%al,nl
%al,nul
%aul,nl
%aul,nul
% [move15]
%nl*,c
%nul*,c
% [move14a]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
% [move16a]
%el*,nl
%el*,nul
%eul*,nl
%eul*,nul
% [move16]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
% [move17]
/* =^ */
ci79:
%al,nl
%al,nul
%aul,nl
%aul,nul
% [move15]
%el*,nl
%el*,nul
%eul*,nl
%eul*,nul
% [move16]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
FS*
S
I R,*(sp)
mov (sp)+,R
I R+,2(R)
/* =+ */
ci70:
%n*,z
%a,z
%ab,1
%aub,1
%a,1
I'B1 A1
%aw,aw
% [move3]
%aw,nw*
% [move4]
%aw,n
% [move5]
%n*,1
%nub*,1
% [move2]
%ew*,nw*
% [move9]
%a,ew*
S*
movB1 A1',R1
I #2(R),R1
movB1 R1,A1''
%a,n
S
movB1 A1',R1
I R,R1
movB1 R1,A1''
%aub,n
S
clr R1
bisB1 A1',R1
I R,R1
movB1 R1,A1''
%ew*,n
% [move10]
%nw*,n
% [move12]
%n*,n
SS
F*
movB1 #1(R),R1
I (sp)+,R1
movB1 R1,#1(R)
%nub*,n
SS
F*
clr R1
bisB1 #1(R),R1
I (sp)+,R1
movB1 R1,#1(R)
%al,c
%al,au
%aul,au
%aul,c
% [move13a]
%al,al
%al,aul
%aul,al
%aul,aul
% [move13]
%al,nl*
%al,nul*
%aul,nl*
%aul,nul*
% [move14]
%al,nl
%al,nul
%aul,nl
%aul,nul
% [move15]
%nl*,c
%nl*,au
%nul*,c
%nul*,au
% [move14a]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
% [move16a]
%el*,nl
%el*,nul
%eul*,nl
%eul*,nul
% [move16]
%nl*,nl
%nl*,nul
%nul*,nl
%nul*,nul
% [move17]
/* =>> (all harder cases handled by =<< -) */
ci75:
%a,1
asrB1 A1
%aub,1
clc
rorB1 A1
%n*,1
F*
asrB1 #1(R)
%nub*,1
F*
clc
rorB1 #1(R)
/* =<< */
ci76:
%a,1
%aub,1
aslB1 A1
%n*,1
%nub*,1
F*
aslB1 #1(R)
%r,aw
ash A2,A1
%r,nw*
S*
ash #2(R),A1
%r,n
S
ash R,A1
/* =<< for longs */
cr92:
%al,aw
%aul,aw
F
ashc A2,R
mov R,A1
mov R+,A1+
%al,n
%aul,n
SS
F
ashc (sp)+,R
mov R,A1
mov R+,A1+
%nl*,n
%nul*,n
FS*
SS
mov 2(sp),R
mov 2(R),R+
mov (R),R
ashc (sp)+,R
mov R,*(sp)
add $2,(sp)
mov R+,*(sp)+
/* field = ... */
ci16:
%a,a
bicB1 Z,A1'
bisB1 A2,A1''
%a,n
S
bicB1 Z,A1'
bisB1 R,A1''
%n*,a
F*
bicB1 Z,#1(R)
bisB1 A2,#1(R)
%[fas1:]
%e*,n
S
F1*
bicB1 Z,#1(R1)
bisB1 R,#1(R1)
%n*,e
F*
S1
bicB1 Z,#1(R)
bisB1 R1,#1(R)
%n*,n
SS
F*
bicB1 Z,#1(R)
bisB1 (sp)+,#1(R)
%{
/*
* c code tables-- set condition codes
*/
struct table cctab[] = {
{106,cc60},
{28,rest},
{55,rest},
{34,rest},
{35,rest},
{36,rest},
{37,rest},
{40,rest},
{41,rest},
{43,rest},
{81,cc81 /* & as in "if ((a&b)==0)" */},
{48,rest},
{60,cc60},
{61,cc60},
{62,cc60},
{63,cc60},
{64,cc60},
{65,cc60},
{66,cc60},
{67,cc60},
{68,cc60},
{69,cc60},
{72,rest},
{73,rest},
{79,rest},
{0}
};
%}
/* relationals */
cc60:
%a,z
%ad,zf
%aub,z
% [move1]
%af,z
movof A1,R
%n*,z
%nd*,zf
%nub*,z
% [move2]
%nf*,z
F*
movof #1(R),R
%n,z
%nf,zf
FC
%aw,aw
%ab,ab
%aub,a
%aub,aub
% [move3]
%nw*,aw
%nb*,ab
%nub*,aub
% [move6]
%n,aw
%nf,ad
% [add1]
%nw*,ew*
%nb*,eb*
%nub*,eub*
% [move7]
%nw*,e
% [move8]
%n,ew*
%nf,ed*
% [add2]
%n,e
%nf,ef
% [add3]
%nw*,nw*
%nb*,nb*
%nub*,nub*
% [move11]
%nw*,n
% [move12]
%n,n
%nf,nf
% [add5]
%al,z
%aul,z
tst A1
X0
tst A1+
X1
%al,c
%al,au
%aul,c
%aul,au
tst A1
X0
cmp A1+,A2
X1
%[lcmp1:]
%al,al
%al,aul
%aul,al
%aul,aul
I A1,A2
X0
I A1+,A2+
X1
%nl*,z
%nul*,z
F*
tst #1(R)
X0
tst #1+2(R)
X1
%nl*,c
%nul*,c
%nl*,au
%nul*,au
F*
tst #1(R)
X0
cmp #1+2(R),A2
X1
%[lcmp2:]
%nl*,al
%nl*,aul
%nul*,al
%nl*,aul
F*
I #1(R),A2
X0
I #1+2(R),A2+
X1
%nl,z
%nul,z
F
tst R
X0
tst R+
X1
%nl,c
%nul,c
%nl,au
%nul,au
F
tst R
X0
cmp R+,A2
X1
%[lcmp3:]
%nl,al
%nl,aul
%nul,al
%nul,aul
F
I R,A2
X0
I R+,A2+
X1
%[lcmp4:]
%nl*,el*
%nl*,eul*
%nul*,el*
%nul*,eul*
F*
S1*
I #1(R),#2(R1)
X0
I #1+2(R),#2+2(R1)
X1
%[lcmp5:]
%nl,el*
%nl,eul*
%nul,el*
%nul,eul*
F
S1*
I R,#2(R1)
X0
I R+,#2+2(R1)
X1
%[lcmp6:]
%nl,nl
%nl,nul
%nul,nl
%nul,nul
FS
S
mov R,-(sp)
mov 4(sp),R
mov (sp)+,2(sp)
I (sp)+,(sp)+
X0
I R,R+
X1
/* & as in "if ((a&b) ==0)" */
cc81:
%a,a
%a,ab
%a,aub
%ab,a
%ab,ab
%ab,aub
%aub,a
%aub,ab
%aub,aub
% [move3]
/*
special case. apparently "u_char b; [u_]char a; if (b & a)..." was
too complicated. the resulting code was horrid. this cuts the
waste by 33%
*/
%a,e
%aub,e
S
IBE R,A1
%n*,a
%nu*,a
%nub*,a
% [move6]
%n,a
% [add1]
%n,e
% [add3]
%n,n
% [add5]
%al,c
%aul,c
%al,au
%aul,au
bit A2,A1+
X1
%nl*,c
%nul*,c
%nl*,au
%nul*,au
F*
bit A2,#2+2(R)
X1
%al,al
%al,aul
%aul,al
%aul,aul
% [lcmp1]
%nl*,al
%nl*,aul
%nul*,al
%nul*,aul
% [lcmp2]
%nl,al
%nl,aul
%nul,al
%nul,aul
% [lcmp3]
%nl*,el*
%nl*,eul*
%nul*,el*
%nul*,eul*
% [lcmp4]
%nl,el*
%nl,eul*
%nul,el*
%nul,eul*
% [lcmp5]
%nl,nl
%nl,nul
%nul,nl
%nul,nul
% [lcmp6]
%nl,c
%nul,c
%nl,au
%nul,au
F
bit A2,R+
X1
/* set codes right */
rest:
%n,n
%nf,nf
H
%{
/*
* c code tables-- expression to -(sp)
*/
struct table sptab[] = {
{106,cs106},
{40,cs40},
{41,cs40},
{55,cs40},
{48,cs40},
{58,cs58},
{56,cs56},
{0}
};
%}
/* name */
cs106:
%z,n
%zf,n
clrB1 -(sp)
%aw,n
mov A1,-(sp)
%aub,n
clr -(sp)
bisb A1,(sp)
%nw*,n
F*
mov #1(R),-(sp)
%al,n
%aul,n
mov A1+,-(sp)
mov A1,-(sp)
/* +, -, |, &~ */
cs40:
%a,1
FS
I' (sp)
%a,aw
FS
I A2,(sp)
%a,nw*
FS
S*
I #2(R),(sp)
%a,n
FS
S
I R,(sp)
/* integer to long */
cs58:
%nu,n
FS
clr -(sp)
%aw,n
mov A1,-(sp)
sxt -(sp)
/* float to long */
cs56:
%nf,n
F
setl
movfi R,-(sp)
seti
/* setup for structure assign */
ci116:
%n,e
F!
S1!
%n,n
SS
F!
mov (sp)+,r1