xref: /plan9/sys/src/cmd/5i/float.c (revision 59cc4ca53493a3c6d2349fe2b7f7c40f7dce7294)
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