MiniUnix/usr/source/c/table.s
/
/ c code tables-- compile to register
/
.globl _regtab
.data
_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
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.; cr70
85.; cr70
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
0
.text
/ 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
%a,n
%ad,n
movB1 A1,R
%af,n
movof A1,R
%n*,n
%nd*,n
F*
movB1 #1(R),R
%nf*,n
F*
movof #1(R),R
%al,n
mov A1+,R+
mov A1,R
%nl*,n
F*
mov #1+2(R),R+
mov #1(R),R
/ ++,-- postfix
cr32:
%a,1
movB1 A1',R
I'B1 A1
%aw,n
mov A1',R
I A2,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)
%nw*,n
F*
mov #1(R),-(sp)
I A2,#1(R)
mov (sp)+,R
%al,1
F
I $1,A1+
V A1
%el*,1
F1*
mov #1+2(R1),R+
mov #1(R1),R
I $1,#1+2(R1)
V #1(R1)
%nl*,1
F*
mov #1+2(R),-(sp)
mov #1(R),-(sp)
add $1,#1+2(R)
V #1(R)
mov (sp)+,R
mov (sp)+,R+
/ - unary, ~
cr37:
%n,n
%nf,n
F
IBF R
%nl,n
F
I R
I R+
V R
/ =
cr80:
%a,n
%ad,nf
S
movB1 R,A1
%af,nf
S
movfo R,A1
%nd*,af
F*
S
movf R,#1(R)
%n*,a
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
%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)+
%nf*,nf
FS*
S
movfo R,*(sp)+
/ +, -, |, &~, <<
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
F
I A2,R+
V R
%nl,al
F
I A2,R
I A2+,R+
V R
%nl,el
F
S1
I R1+,R+
V R
I R1,R
%nl,nl
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
/ >> (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]
/ / R must be odd on integers
cr43:
%n,aw
F
T
sxt R-
div A2,R-
%n,ew*
F
T
sxt R-
S1*
div #2(R1),R-
%n,e
F
T
sxt R-
S1
div R1,R-
%n,n
SS
F
T
sxt R-
div (sp)+,R-
%nf,ad
% [add1]
%nf,ed*
% [add2]
%nf,ef
% [add3]
%nf,nf
% [add5]
/ =+, =-, =|, =&~
cr70:
%[addq1:]
%aw,aw
I A2,A1'
mov A1,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
%[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)+
%[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
/ =*, =<< (for integer multiply, R must be odd)
cr72:
%a,aw
%ad,ad
% [addq1a]
%af,nf
% [addq6]
%ad,ef
% [addq4a]
%a,n
%ad,nf
% [addq5]
%n*,n
% [addq9]
%nd*,nf
% [addq9a]
%nf*,nf
% [addq10]
/ =/ ; R must be odd on integers
cr73:
%a,aw
movB1 A1',R
sxt R-
divBF A2,R-
movB1 R-,A1
%a,n
SS
movB1 A1',R
sxt R-
div (sp)+,R-
movB1 R-,A1
%e*,n
SS
F1*
movB1 #1(R1),R
sxt R-
div (sp)+,R-
movB1 R-,#1(R1)
%n*,n
FS*
SS
movB1 *2(sp),R
sxt R-
div (sp)+,R-
movB1 R-,*(sp)+
%ad,ad
% [addq1a]
%ad,ef
% [addq4a]
%ad,nf
% [addq5]
%af,nf
% [addq6]
%nd*,nf
% [addq9a]
%nf*,nf
% [addq10]
/ =mod; R must be odd on integers
cr74:
%a,aw
movB1 A1',R
sxt R-
div A2,R-
movB1 R,A1
%a,n
SS
movB1 A1',R
sxt R-
div (sp)+,R-
movB1 R,A1
%e*,n
SS
F1*
movB1 #1(R1),R
sxt R-
div (sp)+,R-
movB1 R,#1(R1)
%n*,n
FS*
SS
movB1 *2(sp),R
sxt R-
div (sp)+,R-
mov R,*(sp)+
/ =^ -- =xor
cr79:
%aw,n
% [addq3]
%ab,n
SS
movb A1',R
xor R,(sp)
mov (sp)+,R
movb R,A1
%n*,n
FS*
movB1 *(sp),-(sp)
S
xor R,(sp)
movB1 (sp)+,R
movB1 R,*(sp)+
/ =>> (all complicated cases done by =<< -)
cr75:
%a,1
asrB1 A1'
movB1 A1,R
%n*,1
F*
asrB1 #1(R)
movB1 #1(R),R
/ << for longs
cr91:
%nl,aw
% [add1]
%nl,ew*
% [add2]
%nl,e
% [add3]
%nl,nw*
% [add4]
%nl,n
% [add5]
/ 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
/ integer to long
cr58:
%n,n
F1!
sxt R
/ long to integer
cr59:
%al,n
mov A1+,R
%nl*,n
F*
mov #1+2(R),R
%nl,n
F
mov R+,R
/ *, /, remainder for longs.
cr82:
%nl,nl
SS
FS
jsr pc,I
add $10,sp
/ =*, =/, =rem for longs
/ Operands of the form &x op y, so stack space is known.
cr86:
%n,nl
SS
FS
jsr pc,I
add $6,sp
/
/ c code tables -- compile for side effects.
/ Also set condition codes properly (except for ++, --)
/
.globl _efftab
.data
_efftab=.
30.; ci70
31.; ci70
32.; ci70
33.; ci70
80.; ci80
70.; ci70
71.; ci70 / - like +
78.; ci78
85.; ci78
75.; ci75
76.; ci76
92.; ci92
0
.text
/ =
ci80:
%[move1:]
%a,z
%ad,zf
I'B1 A1
%[move2:]
%n*,z
%nd*,zf
F*
I'B1 #1(R)
%[move3:]
%a,aw
%ab,a
IBE A2,A1
%[move4:]
%ab,n*
%a,nw*
S*
IBE #2(R),A1
%[move5:]
%a,n
S
IB1 R,A1
%[move6:]
%n*,aw
%nb*,a
F*
IBE A2,#1(R)
%[move7:]
%n*,ew*
%nb*,e*
F*
S1*
IBE #2(R1),#1(R)
%[move8:]
%n*,e
F*
S1
IB1 R1,#1(R)
%[move9:]
%e*,nw*
%eb*,n*
S*
F1*
IBE #2(R),#1(R1)
%[move10:]
%e*,n
S
F1*
IB1 R,#1(R1)
%[move11:]
%n*,nw*
%nb*,n*
FS*
S*
IBE #2(R),*(sp)+
%[move12:]
%n*,n
FS*
S
IB1 R,*(sp)+
%al,z
clr A1
clr A1+
%al,aw
mov A2,A1+
sxt A1
%al,nw*
mov #2(R),A1+
sxt A1
%al,n
S
mov R,A1+
sxt A1
%al,nf
S
setl
movfi R,A1
seti
%el*,nf
S
F1*
setl
movfi R,#1(R1)
seti
%[move13a:]
%al,c
I A2,A1+
V A1
%[move13:]
%al,al
I A2,A1
I A2+,A1+
V A1
%[move14:]
%al,nl*
S*
I #2(R),A1
I #2+2(R),A1+
V A1
%[move14a:]
%nl*,c
F*
I A2,2+#1(R)
V #1(R)
%[move15:]
%al,nl
S
I R,A1
I R+,A1+
V A1
%nl*,aw
F*
mov A2,#1+2(R)
sxt #1(R)
%[move16:]
%el*,nl
S
F1*
I R+,#1+2(R1)
V #1(R1)
I R,#1(R1)
%nl*,n
SS
F*
mov (sp)+,#1+2(R)
sxt #1(R)
%[move17:]
%nl*,nl
SS
F*
I (sp)+,#1(R)
I (sp)+,#1+2(R)
V #1(R)
/ =| and =& ~
ci78:
%a,a
% [move3]
%a,n
% [move5]
%n*,a
% [move6]
%n*,e*
% [move7]
%n*,e
% [move8]
%e*,n*
% [move9]
%e*,n
% [move10]
%n*,n*
% [move11]
%n*,n
% [move12]
%al,c
% [move13a]
%al,al
% [move13]
%al,nl*
% [move14]
%al,nl
% [move15]
%nl*,c
% [move14a]
%el*,nl
% [move16]
%nl*,nl
% [move17]
/ =+
ci70:
%n*,z
%a,z
%a,1
I'B1 A1
%aw,aw
% [move3]
%aw,nw*
% [move4]
%aw,n
% [move5]
%n*,1
% [move2]
%ew*,nw*
% [move9]
%a,nw*
S*
movB1 A1',R1
I #2(R),R1
movB1 R1,A1
%a,n
S
movB1 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)
%al,c
% [move13a]
%al,al
% [move13]
%al,nl*
% [move14]
%al,nl
% [move15]
%nl*,c
% [move14a]
%el*,nl
% [move16]
%nl*,nl
% [move17]
/ =>> (all harder cases handled by =<< -)
ci75:
%a,1
asrB1 A1
%n*,1
F*
asrB1 #1(R)
/ =<<
ci76:
%a,1
aslB1 A1
%n*,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
ci92:
%al,aw
F
ashc A2,R
mov R,A1
mov R+,A1+
%al,n
SS
F
ashc (sp)+,R
mov R,A1
mov R+,A1+
%nl*,n
FS*
SS
mov 2(sp),R
mov 2(R),R+
mov (R),R
ashc (sp)+,R
mov R,*(sp)
mov (sp)+,R
mov R+,2(R)
/
/ c code tables-- set condition codes
/
.globl _cctab
.data
_cctab=.
106.; cc60
28.; rest
55.; rest
34.; rest
35.; rest
36.; rest
37.; rest
40.; rest
41.; rest
42.; rest
43.; rest
45.; rest
46.; 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
.text
/ relationals
cc60:
%a,z
%ad,zf
% [move1]
%af,z
movof A1,R
%n*,z
%nd*,zf
% [move2]
%nf*,z
F*
movof #1(R),R
%n,z
%nf,zf
FC
%aw,aw
%ab,ab
% [move3]
%nw*,aw
%nb*,ab
% [move6]
%n,aw
%nf,ad
% [add1]
%nw*,ew*
%nb*,eb*
% [move7]
%nw*,e
% [move8]
%n,ew*
%nf,ed*
% [add2]
%n,e
%nf,ef
% [add3]
%nw*,nw*
%nb*,nb*
% [move11]
%nw*,n
% [move12]
%n,n
%nf,nf
% [add5]
/ & as in "if ((a&b) ==0)"
cc81:
%a,a
% [move3]
%n*,a
% [move6]
%n,a
% [add1]
%n,e
% [add3]
%n,n
% [add5]
/ set codes right
rest:
%n,n
%nf,nf
H
/
/ c code tables-- expression to -(sp)
/
.globl _sptab
.data
_sptab=.
106.; cs106
40.; cs40
41.; cs40
55.; cs40
48.; cs40
58.; cs58
56.; cs56
0
.text
/ name
cs106:
%z,n
%zf,n
clrB1 -(sp)
%aw,n
mov A1,-(sp)
%nw*,n
F*
mov #1(R),-(sp)
%al,n
mov A1+,-(sp)
mov A1,-(sp)
/ +, -, |, &~
cs40:
%n,1
FS
I' (sp)
%n,aw
FS
I A2,(sp)
%n,nw*
FS
S*
I #2(R),(sp)
%n,n
FS
S
I R,(sp)
/ integer to long
cs58:
%n,n
FS
sxt -(sp)
/ float to long
cs56:
%nf,n
F
setl
movfi R,-(sp)
seti