1*7dd7cddfSDavid du Colombier #include <u.h>
2*7dd7cddfSDavid du Colombier #include <libc.h>
3*7dd7cddfSDavid du Colombier #include <bio.h>
4*7dd7cddfSDavid du Colombier #include <mach.h>
5*7dd7cddfSDavid du Colombier #include "arm.h"
6*7dd7cddfSDavid du Colombier
7*7dd7cddfSDavid du Colombier void unimp(ulong);
8*7dd7cddfSDavid du Colombier void Ifcmp(ulong);
9*7dd7cddfSDavid du Colombier void Ifdiv(ulong);
10*7dd7cddfSDavid du Colombier void Ifmul(ulong);
11*7dd7cddfSDavid du Colombier void Ifadd(ulong);
12*7dd7cddfSDavid du Colombier void Ifsub(ulong);
13*7dd7cddfSDavid du Colombier void Ifmov(ulong);
14*7dd7cddfSDavid du Colombier void Icvtd(ulong);
15*7dd7cddfSDavid du Colombier void Icvtw(ulong);
16*7dd7cddfSDavid du Colombier void Icvts(ulong);
17*7dd7cddfSDavid du Colombier void Ifabs(ulong);
18*7dd7cddfSDavid du Colombier void Ifneg(ulong);
19*7dd7cddfSDavid du Colombier
20*7dd7cddfSDavid du Colombier Inst cop1[] = {
21*7dd7cddfSDavid du Colombier { Ifadd, "add.f", Ifloat },
22*7dd7cddfSDavid du Colombier { Ifsub, "sub.f", Ifloat },
23*7dd7cddfSDavid du Colombier { Ifmul, "mul.f", Ifloat },
24*7dd7cddfSDavid du Colombier { Ifdiv, "div.f", Ifloat },
25*7dd7cddfSDavid du Colombier { unimp, "", },
26*7dd7cddfSDavid du Colombier { Ifabs, "abs.f", Ifloat },
27*7dd7cddfSDavid du Colombier { Ifmov, "mov.f", Ifloat },
28*7dd7cddfSDavid du Colombier { Ifneg, "neg.f", Ifloat },
29*7dd7cddfSDavid du Colombier { unimp, "", },
30*7dd7cddfSDavid du Colombier { unimp, "", },
31*7dd7cddfSDavid du Colombier { unimp, "", },
32*7dd7cddfSDavid du Colombier { unimp, "", },
33*7dd7cddfSDavid du Colombier { unimp, "", },
34*7dd7cddfSDavid du Colombier { unimp, "", },
35*7dd7cddfSDavid du Colombier { unimp, "", },
36*7dd7cddfSDavid du Colombier { unimp, "", },
37*7dd7cddfSDavid du Colombier { unimp, "", },
38*7dd7cddfSDavid du Colombier { unimp, "", },
39*7dd7cddfSDavid du Colombier { unimp, "", },
40*7dd7cddfSDavid du Colombier { unimp, "", },
41*7dd7cddfSDavid du Colombier { unimp, "", },
42*7dd7cddfSDavid du Colombier { unimp, "", },
43*7dd7cddfSDavid du Colombier { unimp, "", },
44*7dd7cddfSDavid du Colombier { unimp, "", },
45*7dd7cddfSDavid du Colombier { unimp, "", },
46*7dd7cddfSDavid du Colombier { unimp, "", },
47*7dd7cddfSDavid du Colombier { unimp, "", },
48*7dd7cddfSDavid du Colombier { unimp, "", },
49*7dd7cddfSDavid du Colombier { unimp, "", },
50*7dd7cddfSDavid du Colombier { unimp, "", },
51*7dd7cddfSDavid du Colombier { unimp, "", },
52*7dd7cddfSDavid du Colombier { unimp, "", },
53*7dd7cddfSDavid du Colombier { Icvts, "cvt.s", Ifloat },
54*7dd7cddfSDavid du Colombier { Icvtd, "cvt.d", Ifloat },
55*7dd7cddfSDavid du Colombier { unimp, "", },
56*7dd7cddfSDavid du Colombier { unimp, "", },
57*7dd7cddfSDavid du Colombier { Icvtw, "cvt.w", Ifloat },
58*7dd7cddfSDavid du Colombier { unimp, "", },
59*7dd7cddfSDavid du Colombier { unimp, "", },
60*7dd7cddfSDavid du Colombier { unimp, "", },
61*7dd7cddfSDavid du Colombier { unimp, "", },
62*7dd7cddfSDavid du Colombier { unimp, "", },
63*7dd7cddfSDavid du Colombier { unimp, "", },
64*7dd7cddfSDavid du Colombier { unimp, "", },
65*7dd7cddfSDavid du Colombier { unimp, "", },
66*7dd7cddfSDavid du Colombier { unimp, "", },
67*7dd7cddfSDavid du Colombier { unimp, "", },
68*7dd7cddfSDavid du Colombier { unimp, "", },
69*7dd7cddfSDavid du Colombier { Ifcmp, "c.f", Ifloat },
70*7dd7cddfSDavid du Colombier { Ifcmp, "c.un", Ifloat },
71*7dd7cddfSDavid du Colombier { Ifcmp, "c.eq", Ifloat },
72*7dd7cddfSDavid du Colombier { Ifcmp, "c.ueq", Ifloat },
73*7dd7cddfSDavid du Colombier { Ifcmp, "c.olt", Ifloat },
74*7dd7cddfSDavid du Colombier { Ifcmp, "c.ult", Ifloat },
75*7dd7cddfSDavid du Colombier { Ifcmp, "c.ole", Ifloat },
76*7dd7cddfSDavid du Colombier { Ifcmp, "c.ule", Ifloat },
77*7dd7cddfSDavid du Colombier { Ifcmp, "c,sf", Ifloat },
78*7dd7cddfSDavid du Colombier { Ifcmp, "c.ngle",Ifloat },
79*7dd7cddfSDavid du Colombier { Ifcmp, "c.seq", Ifloat },
80*7dd7cddfSDavid du Colombier { Ifcmp, "c.ngl", Ifloat },
81*7dd7cddfSDavid du Colombier { Ifcmp, "c.lt", Ifloat },
82*7dd7cddfSDavid du Colombier { Ifcmp, "c.nge", Ifloat },
83*7dd7cddfSDavid du Colombier { Ifcmp, "c.le", Ifloat },
84*7dd7cddfSDavid du Colombier { Ifcmp, "c.ngt", Ifloat },
85*7dd7cddfSDavid du Colombier { 0 }
86*7dd7cddfSDavid du Colombier };
87*7dd7cddfSDavid du Colombier
88*7dd7cddfSDavid du Colombier void
unimp(ulong inst)89*7dd7cddfSDavid du Colombier unimp(ulong inst)
90*7dd7cddfSDavid du Colombier {
91*7dd7cddfSDavid du Colombier print("op %d\n", inst&0x3f);
92*7dd7cddfSDavid du Colombier Bprint(bioout, "Unimplemented floating point Trap IR %.8lux\n", inst);
93*7dd7cddfSDavid du Colombier longjmp(errjmp, 0);
94*7dd7cddfSDavid du Colombier }
95*7dd7cddfSDavid du Colombier
96*7dd7cddfSDavid du Colombier void
inval(ulong inst)97*7dd7cddfSDavid du Colombier inval(ulong inst)
98*7dd7cddfSDavid du Colombier {
99*7dd7cddfSDavid du Colombier Bprint(bioout, "Invalid Operation Exception IR %.8lux\n", inst);
100*7dd7cddfSDavid du Colombier longjmp(errjmp, 0);
101*7dd7cddfSDavid du Colombier }
102*7dd7cddfSDavid du Colombier
103*7dd7cddfSDavid du Colombier void
ifmt(int r)104*7dd7cddfSDavid du Colombier ifmt(int r)
105*7dd7cddfSDavid du Colombier {
106*7dd7cddfSDavid du Colombier Bprint(bioout, "Invalid Floating Data Format f%d pc 0x%lux\n", r, reg.r[15]);
107*7dd7cddfSDavid du Colombier longjmp(errjmp, 0);
108*7dd7cddfSDavid du Colombier }
109*7dd7cddfSDavid du Colombier
110*7dd7cddfSDavid du Colombier void
floatop(int dst,int s1,int s2)111*7dd7cddfSDavid du Colombier floatop(int dst, int s1, int s2)
112*7dd7cddfSDavid du Colombier {
113*7dd7cddfSDavid du Colombier }
114*7dd7cddfSDavid du Colombier
115*7dd7cddfSDavid du Colombier void
doubop(int dst,int s1,int s2)116*7dd7cddfSDavid du Colombier doubop(int dst, int s1, int s2)
117*7dd7cddfSDavid du Colombier {
118*7dd7cddfSDavid du Colombier }
119*7dd7cddfSDavid du Colombier
120*7dd7cddfSDavid du Colombier void
Iswc1(ulong inst)121*7dd7cddfSDavid du Colombier Iswc1(ulong inst)
122*7dd7cddfSDavid du Colombier {
123*7dd7cddfSDavid du Colombier }
124*7dd7cddfSDavid du Colombier
125*7dd7cddfSDavid du Colombier void
Ifsub(ulong ir)126*7dd7cddfSDavid du Colombier Ifsub(ulong ir)
127*7dd7cddfSDavid du Colombier {
128*7dd7cddfSDavid du Colombier }
129*7dd7cddfSDavid du Colombier
130*7dd7cddfSDavid du Colombier void
Ifmov(ulong ir)131*7dd7cddfSDavid du Colombier Ifmov(ulong ir)
132*7dd7cddfSDavid du Colombier {
133*7dd7cddfSDavid du Colombier }
134*7dd7cddfSDavid du Colombier
135*7dd7cddfSDavid du Colombier void
Ifabs(ulong ir)136*7dd7cddfSDavid du Colombier Ifabs(ulong ir)
137*7dd7cddfSDavid du Colombier {
138*7dd7cddfSDavid du Colombier }
139*7dd7cddfSDavid du Colombier
140*7dd7cddfSDavid du Colombier void
Ifneg(ulong ir)141*7dd7cddfSDavid du Colombier Ifneg(ulong ir)
142*7dd7cddfSDavid du Colombier {
143*7dd7cddfSDavid du Colombier }
144*7dd7cddfSDavid du Colombier
145*7dd7cddfSDavid du Colombier void
Icvtd(ulong ir)146*7dd7cddfSDavid du Colombier Icvtd(ulong ir)
147*7dd7cddfSDavid du Colombier {
148*7dd7cddfSDavid du Colombier }
149*7dd7cddfSDavid du Colombier
150*7dd7cddfSDavid du Colombier void
Icvts(ulong ir)151*7dd7cddfSDavid du Colombier Icvts(ulong ir)
152*7dd7cddfSDavid du Colombier {
153*7dd7cddfSDavid du Colombier }
154*7dd7cddfSDavid du Colombier
155*7dd7cddfSDavid du Colombier void
Icvtw(ulong ir)156*7dd7cddfSDavid du Colombier Icvtw(ulong ir)
157*7dd7cddfSDavid du Colombier {
158*7dd7cddfSDavid du Colombier }
159*7dd7cddfSDavid du Colombier
160*7dd7cddfSDavid du Colombier void
Ifadd(ulong ir)161*7dd7cddfSDavid du Colombier Ifadd(ulong ir)
162*7dd7cddfSDavid du Colombier {
163*7dd7cddfSDavid du Colombier }
164*7dd7cddfSDavid du Colombier
165*7dd7cddfSDavid du Colombier void
Ifmul(ulong ir)166*7dd7cddfSDavid du Colombier Ifmul(ulong ir)
167*7dd7cddfSDavid du Colombier {
168*7dd7cddfSDavid du Colombier }
169*7dd7cddfSDavid du Colombier
170*7dd7cddfSDavid du Colombier void
Ifdiv(ulong ir)171*7dd7cddfSDavid du Colombier Ifdiv(ulong ir)
172*7dd7cddfSDavid du Colombier {
173*7dd7cddfSDavid du Colombier }
174*7dd7cddfSDavid du Colombier
175*7dd7cddfSDavid du Colombier void
Ilwc1(ulong inst)176*7dd7cddfSDavid du Colombier Ilwc1(ulong inst)
177*7dd7cddfSDavid du Colombier {
178*7dd7cddfSDavid du Colombier }
179*7dd7cddfSDavid du Colombier
180*7dd7cddfSDavid du Colombier void
Ibcfbct(ulong inst)181*7dd7cddfSDavid du Colombier Ibcfbct(ulong inst)
182*7dd7cddfSDavid du Colombier {
183*7dd7cddfSDavid du Colombier }
184*7dd7cddfSDavid du Colombier
185*7dd7cddfSDavid du Colombier void
Imtct(ulong ir)186*7dd7cddfSDavid du Colombier Imtct(ulong ir)
187*7dd7cddfSDavid du Colombier {
188*7dd7cddfSDavid du Colombier }
189*7dd7cddfSDavid du Colombier
190*7dd7cddfSDavid du Colombier void
Imfcf(ulong ir)191*7dd7cddfSDavid du Colombier Imfcf(ulong ir)
192*7dd7cddfSDavid du Colombier {
193*7dd7cddfSDavid du Colombier }
194*7dd7cddfSDavid du Colombier
195*7dd7cddfSDavid du Colombier void
Icop1(ulong ir)196*7dd7cddfSDavid du Colombier Icop1(ulong ir)
197*7dd7cddfSDavid du Colombier {
198*7dd7cddfSDavid du Colombier }
199*7dd7cddfSDavid du Colombier
200*7dd7cddfSDavid du Colombier void
Ifcmp(ulong ir)201*7dd7cddfSDavid du Colombier Ifcmp(ulong ir)
202*7dd7cddfSDavid du Colombier {
203*7dd7cddfSDavid du Colombier }
204