am33-2.igen revision 1.6 1 1.1 christos // data cache pre-fetch:
2 1.1 christos
3 1.1 christos // 1111 1001 1010 0110 Rm.. 0000; dcpf (Rm)
4 1.1 christos 8.0xf9+8.0xa6+4.RN2,4.0000:D1a:::dcpf
5 1.1 christos "dcpf"
6 1.1 christos *am33_2
7 1.1 christos {
8 1.1 christos int srcreg;
9 1.1 christos
10 1.1 christos PC = cia;
11 1.1 christos
12 1.1 christos srcreg = translate_rreg (SD_, RN2);
13 1.1 christos load_word (State.regs[srcreg]);
14 1.1 christos }
15 1.1 christos
16 1.1 christos // 1111 1001 1010 0111 0000 0000; dcpf (sp)
17 1.1 christos 8.0xf9+8.0xa7+8.0x00:D1b:::dcpf
18 1.1 christos "dcpf"
19 1.1 christos *am33_2
20 1.1 christos {
21 1.1 christos PC = cia;
22 1.1 christos
23 1.1 christos load_word (SP);
24 1.1 christos }
25 1.1 christos
26 1.1 christos // 1111 1011 1010 0110 Ri.. Rm.. 0000 0000; dcpf (Ri,Rm)
27 1.1 christos 8.0xfb+8.0xa6+4.RN2,4.RN0+8.0x00:D2a:::dcpf
28 1.1 christos "dcpf"
29 1.1 christos *am33_2
30 1.1 christos {
31 1.1 christos int srci, srcm;
32 1.1 christos
33 1.1 christos PC = cia;
34 1.1 christos
35 1.1 christos srci = translate_rreg (SD_, RN2);
36 1.1 christos srcm = translate_rreg (SD_, RN0);
37 1.1 christos
38 1.1 christos load_word (State.regs[srci] + State.regs[srcm]);
39 1.1 christos }
40 1.1 christos
41 1.1 christos // 1111 1011 1010 0111 Rm.. 0000 IMM8; dcpf (d8,Rm)
42 1.1 christos 8.0xfb+8.0xa7+4.RN2,4.0000+8.IMM8:D2b:::dcpf
43 1.1 christos "dcpf"
44 1.1 christos *am33_2
45 1.1 christos {
46 1.1 christos int srcreg;
47 1.1 christos
48 1.1 christos PC = cia;
49 1.1 christos
50 1.1 christos srcreg = translate_rreg (SD_, RN2);
51 1.1 christos
52 1.1 christos load_word (State.regs[srcreg] + EXTEND8 (IMM8));
53 1.1 christos }
54 1.1 christos
55 1.1 christos // 1111 1101 1010 0111 Rm.. 0000 IMM24; dcpf (d24,Rm)
56 1.1 christos 8.0xfd+8.0xa7+4.RN2,4.0000+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::dcpf
57 1.1 christos "dcpf"
58 1.1 christos *am33_2
59 1.1 christos {
60 1.1 christos int srcreg;
61 1.1 christos
62 1.1 christos PC = cia;
63 1.1 christos
64 1.1 christos srcreg = translate_rreg (SD_, RN2);
65 1.1 christos
66 1.1 christos load_word (State.regs[srcreg] + EXTEND24 (FETCH24 (IMM24A,
67 1.1 christos IMM24B, IMM24C)));
68 1.1 christos }
69 1.1 christos
70 1.1 christos // 1111 1110 0100 0110 Rm.. 0000 IMM32; dcpf (d32,Rm)
71 1.1 christos 8.0xfe+8.0x46+4.RN2,4.0000+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::dcpf
72 1.1 christos "dcpf"
73 1.1 christos *am33_2
74 1.1 christos {
75 1.1 christos int srcreg;
76 1.1 christos
77 1.1 christos PC = cia;
78 1.1 christos
79 1.1 christos srcreg = translate_rreg (SD_, RN2);
80 1.1 christos
81 1.1 christos load_word (State.regs[srcreg]
82 1.1 christos + FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D));
83 1.1 christos }
84 1.1 christos
85 1.1 christos // bit operations with imm8,(abs16) addressing mode:
86 1.1 christos
87 1.1 christos // 1111 1110 1000 0010 ABS16 IMM8; btst imm8,(abs16)
88 1.1 christos 8.0xfe+8.0x82+8.IMM16A+8.IMM16B+8.IMM8:D3:::btst
89 1.1 christos "btst"
90 1.1 christos *am33_2
91 1.1 christos {
92 1.1 christos PC = cia;
93 1.1 christos genericBtst (IMM8, FETCH16 (IMM16A, IMM16B));
94 1.1 christos }
95 1.1 christos
96 1.1 christos // 1111 1110 1000 0000 ABS16 IMM8; bset imm8,(abs16)
97 1.1 christos 8.0xfe+8.0x80+8.IMM16A+8.IMM16B+8.IMM8:D3:::bset
98 1.1 christos "bset"
99 1.1 christos *am33_2
100 1.1 christos {
101 1.6 christos uint32_t temp;
102 1.1 christos int z;
103 1.1 christos
104 1.1 christos PC = cia;
105 1.1 christos temp = load_byte (FETCH16 (IMM16A, IMM16B));
106 1.1 christos z = (temp & IMM8) == 0;
107 1.1 christos temp |= IMM8;
108 1.1 christos store_byte (FETCH16 (IMM16A, IMM16B), temp);
109 1.1 christos PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
110 1.1 christos PSW |= (z ? PSW_Z : 0);
111 1.1 christos }
112 1.1 christos
113 1.1 christos // 1111 1110 1000 0001 ABS16 IMM8; bclr imm8,(abs16)
114 1.1 christos 8.0xfe+8.0x81+8.IMM16A+8.IMM16B+8.IMM8:D3:::bclr
115 1.1 christos "bclr"
116 1.1 christos *am33_2
117 1.1 christos {
118 1.6 christos uint32_t temp;
119 1.1 christos int z;
120 1.1 christos
121 1.1 christos PC = cia;
122 1.1 christos temp = load_byte (FETCH16 (IMM16A, IMM16B));
123 1.1 christos z = (temp & IMM8) == 0;
124 1.1 christos temp = temp & ~(IMM8);
125 1.1 christos store_byte (FETCH16 (IMM16A, IMM16B), temp);
126 1.1 christos PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
127 1.1 christos PSW |= (z ? PSW_Z : 0);
128 1.1 christos }
129 1.1 christos
130 1.1 christos // single precision fmov:
131 1.1 christos
132 1.1 christos // 1111 1001 0010 000X Rm.. Sn..; fmov (Rm),FSn
133 1.1 christos 8.0xf9+4.2,3.0,1.X+4.Rm,4.Sn:D1a:::fmov
134 1.1 christos "fmov"
135 1.1 christos *am33_2
136 1.1 christos {
137 1.1 christos PC = cia;
138 1.1 christos
139 1.1 christos if (FPU_DISABLED)
140 1.1 christos fpu_disabled_exception (SD, CPU, cia);
141 1.1 christos else
142 1.1 christos {
143 1.1 christos int reg = translate_rreg (SD_, Rm);
144 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]);
145 1.1 christos }
146 1.1 christos }
147 1.1 christos
148 1.1 christos // 1111 1001 0010 001X Rm.. Sn..; fmov (Rm+),FSn
149 1.1 christos 8.0xf9+4.2,3.1,1.X+4.Rm,4.Sn:D1b:::fmov
150 1.1 christos "fmov"
151 1.1 christos *am33_2
152 1.1 christos {
153 1.1 christos PC = cia;
154 1.1 christos
155 1.1 christos if (FPU_DISABLED)
156 1.1 christos fpu_disabled_exception (SD, CPU, cia);
157 1.1 christos else
158 1.1 christos {
159 1.1 christos int reg = translate_rreg (SD_, Rm);
160 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]);
161 1.1 christos State.regs[reg] += 4;
162 1.1 christos }
163 1.1 christos }
164 1.1 christos
165 1.1 christos // 1111 1001 0010 010X ---- Sn..; fmov (SP),FSn
166 1.1 christos 8.0xf9+4.2,3.2,1.X+4.0,4.Sn:D1c:::fmov
167 1.1 christos "fmov"
168 1.1 christos *am33_2
169 1.1 christos {
170 1.1 christos PC = cia;
171 1.1 christos
172 1.1 christos if (FPU_DISABLED)
173 1.1 christos fpu_disabled_exception (SD, CPU, cia);
174 1.1 christos else
175 1.1 christos {
176 1.1 christos int reg = REG_SP;
177 1.1 christos XS2FS (X,Sn) = load_word (State.regs[reg]);
178 1.1 christos }
179 1.1 christos }
180 1.1 christos
181 1.1 christos // 1111 1001 0010 011X Rm.. Sn..; fmov Rm,FSn
182 1.1 christos 8.0xf9+4.2,3.3,1.X+4.Rm,4.Sn:D1d:::fmov
183 1.1 christos "fmov"
184 1.1 christos *am33_2
185 1.1 christos {
186 1.1 christos PC = cia;
187 1.1 christos
188 1.1 christos if (FPU_DISABLED)
189 1.1 christos fpu_disabled_exception (SD, CPU, cia);
190 1.1 christos else
191 1.1 christos {
192 1.1 christos int reg = translate_rreg (SD_, Rm);
193 1.1 christos XS2FS (X,Sn) = State.regs[reg];
194 1.1 christos }
195 1.1 christos }
196 1.1 christos
197 1.1 christos // 1111 1001 0011 00Y0 Sm.. Rn..; fmov FSm,(Rn)
198 1.1 christos 8.0xf9+4.3,2.0,1.Y,1.0+4.Sm,4.Rn:D1e:::fmov
199 1.1 christos "fmov"
200 1.1 christos *am33_2
201 1.1 christos {
202 1.1 christos PC = cia;
203 1.1 christos
204 1.1 christos if (FPU_DISABLED)
205 1.1 christos fpu_disabled_exception (SD, CPU, cia);
206 1.1 christos else
207 1.1 christos {
208 1.1 christos int reg = translate_rreg (SD_, Rn);
209 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm));
210 1.1 christos }
211 1.1 christos }
212 1.1 christos
213 1.1 christos // 1111 1001 0011 00Y1 Sm.. Rn..; fmov FSm,(Rn+)
214 1.1 christos 8.0xf9+4.3,2.0,1.Y,1.1+4.Sm,4.Rn:D1f:::fmov
215 1.1 christos "fmov"
216 1.1 christos *am33_2
217 1.1 christos {
218 1.1 christos PC = cia;
219 1.1 christos
220 1.1 christos if (FPU_DISABLED)
221 1.1 christos fpu_disabled_exception (SD, CPU, cia);
222 1.1 christos else
223 1.1 christos {
224 1.1 christos int reg = translate_rreg (SD_, Rn);
225 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm));
226 1.1 christos State.regs[reg] += 4;
227 1.1 christos }
228 1.1 christos }
229 1.1 christos
230 1.1 christos // 1111 1001 0011 01Y0 Sm.. ----; fmov FSm,(SP)
231 1.1 christos 8.0xf9+4.3,2.1,1.Y,1.0+4.Sm,4.0:D1g:::fmov
232 1.1 christos "fmov"
233 1.1 christos *am33_2
234 1.1 christos {
235 1.1 christos PC = cia;
236 1.1 christos
237 1.1 christos if (FPU_DISABLED)
238 1.1 christos fpu_disabled_exception (SD, CPU, cia);
239 1.1 christos else
240 1.1 christos {
241 1.1 christos int reg = REG_SP;
242 1.1 christos store_word (State.regs[reg], XS2FS (Y,Sm));
243 1.1 christos }
244 1.1 christos }
245 1.1 christos
246 1.1 christos // 1111 1001 0011 01Y1 Sm.. Rn..; fmov FSm,Rn
247 1.1 christos 8.0xf9+4.3,2.1,1.Y,1.1+4.Sm,4.Rn:D1h:::fmov
248 1.1 christos "fmov"
249 1.1 christos *am33_2
250 1.1 christos {
251 1.1 christos PC = cia;
252 1.1 christos
253 1.1 christos if (FPU_DISABLED)
254 1.1 christos fpu_disabled_exception (SD, CPU, cia);
255 1.1 christos else
256 1.1 christos {
257 1.1 christos int reg = translate_rreg (SD_, Rn);
258 1.1 christos State.regs[reg] = XS2FS (Y,Sm);
259 1.1 christos }
260 1.1 christos }
261 1.1 christos
262 1.1 christos // 1111 1001 0100 00YX Sm.. Sn..; fmov FSm,FSn
263 1.1 christos 8.0xf9+4.4,2.0,1.Y,1.X+4.Sm,4.Sn:D1i:::fmov
264 1.1 christos "fmov"
265 1.1 christos *am33_2
266 1.1 christos {
267 1.1 christos PC = cia;
268 1.1 christos
269 1.1 christos if (FPU_DISABLED)
270 1.1 christos fpu_disabled_exception (SD, CPU, cia);
271 1.1 christos else
272 1.1 christos XS2FS (X,Sn) = XS2FS (Y,Sm);
273 1.1 christos }
274 1.1 christos
275 1.1 christos // 1111 1011 0010 000X Rm.. Sn.. d8; fmov (d8,Rm),FSn
276 1.1 christos 8.0xfb+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM8:D2a:::fmov
277 1.1 christos "fmov"
278 1.1 christos *am33_2
279 1.1 christos {
280 1.1 christos PC = cia;
281 1.1 christos
282 1.1 christos if (FPU_DISABLED)
283 1.1 christos fpu_disabled_exception (SD, CPU, cia);
284 1.1 christos else
285 1.1 christos {
286 1.1 christos int reg = translate_rreg (SD_, Rm);
287 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8));
288 1.1 christos }
289 1.1 christos }
290 1.1 christos
291 1.1 christos // 1111 1011 0010 001X Rm.. Sn.. d8; fmov (Rm+,imm8),FSn
292 1.1 christos 8.0xfb+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM8:D2b:::fmov
293 1.1 christos "fmov"
294 1.1 christos *am33_2
295 1.1 christos {
296 1.1 christos PC = cia;
297 1.1 christos
298 1.1 christos if (FPU_DISABLED)
299 1.1 christos fpu_disabled_exception (SD, CPU, cia);
300 1.1 christos else
301 1.1 christos {
302 1.1 christos int reg = translate_rreg (SD_, Rm);
303 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8));
304 1.1 christos State.regs[reg] += 4;
305 1.1 christos }
306 1.1 christos }
307 1.1 christos
308 1.1 christos // 1111 1011 0010 010X ---- Sn.. d8; fmov (d8,SP),FSn
309 1.1 christos 8.0xfb+4.2,3.2,1.X+4.0,4.Sn+8.IMM8:D2c:::fmov
310 1.1 christos "fmov"
311 1.1 christos *am33_2
312 1.1 christos {
313 1.1 christos PC = cia;
314 1.1 christos
315 1.1 christos if (FPU_DISABLED)
316 1.1 christos fpu_disabled_exception (SD, CPU, cia);
317 1.1 christos else
318 1.1 christos {
319 1.1 christos int reg = REG_SP;
320 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + IMM8);
321 1.1 christos }
322 1.1 christos }
323 1.1 christos
324 1.1 christos // 1111 1011 0010 0111 Ri.. Rm.. Sn.. --Z-; fmov (Ri,Rm),FSn
325 1.1 christos 8.0xfb+8.0x27+4.Ri,4.Rm+4.Sn,2.0,1.Z,1.0:D2d:::fmov
326 1.1 christos "fmov"
327 1.1 christos *am33_2
328 1.1 christos {
329 1.1 christos PC = cia;
330 1.1 christos
331 1.1 christos if (FPU_DISABLED)
332 1.1 christos fpu_disabled_exception (SD, CPU, cia);
333 1.1 christos else
334 1.1 christos {
335 1.1 christos int ri = translate_rreg (SD_, Ri);
336 1.1 christos int rm = translate_rreg (SD_, Rm);
337 1.1 christos XS2FS (Z, Sn) = load_word (State.regs[ri] + State.regs[rm]);
338 1.1 christos }
339 1.1 christos }
340 1.1 christos
341 1.1 christos // 1111 1011 0011 00Y0 Sm.. Rn.. d8; fmov FSm,(d8,Rn)
342 1.1 christos 8.0xfb+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM8:D2e:::fmov
343 1.1 christos "fmov"
344 1.1 christos *am33_2
345 1.1 christos {
346 1.1 christos PC = cia;
347 1.1 christos
348 1.1 christos if (FPU_DISABLED)
349 1.1 christos fpu_disabled_exception (SD, CPU, cia);
350 1.1 christos else
351 1.1 christos {
352 1.1 christos int reg = translate_rreg (SD_, Rn);
353 1.1 christos store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm));
354 1.1 christos }
355 1.1 christos }
356 1.1 christos
357 1.1 christos // 1111 1011 0011 00Y1 Sm.. Rn.. d8; fmov FSm,(Rn+,d8)
358 1.1 christos 8.0xfb+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM8:D2f:::fmov
359 1.1 christos "fmov"
360 1.1 christos *am33_2
361 1.1 christos {
362 1.1 christos PC = cia;
363 1.1 christos
364 1.1 christos if (FPU_DISABLED)
365 1.1 christos fpu_disabled_exception (SD, CPU, cia);
366 1.1 christos else
367 1.1 christos {
368 1.1 christos int reg = translate_rreg (SD_, Rn);
369 1.1 christos store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm));
370 1.1 christos State.regs[reg] += 4;
371 1.1 christos }
372 1.1 christos }
373 1.1 christos
374 1.1 christos // 1111 1011 0011 01Y0 Sm.. ---- d8; fmov FSm,(d8,SP)
375 1.1 christos 8.0xfb+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM8:D2g:::fmov
376 1.1 christos "fmov"
377 1.1 christos *am33_2
378 1.1 christos {
379 1.1 christos PC = cia;
380 1.1 christos
381 1.1 christos if (FPU_DISABLED)
382 1.1 christos fpu_disabled_exception (SD, CPU, cia);
383 1.1 christos else
384 1.1 christos {
385 1.1 christos int reg = REG_SP;
386 1.1 christos store_word (State.regs[reg] + IMM8, XS2FS (Y, Sm));
387 1.1 christos }
388 1.1 christos }
389 1.1 christos
390 1.1 christos // 1111 1011 0011 0111 Ri.. Rm.. Sm.. --Z-; fmov FSm,(Ri,Rm)
391 1.1 christos 8.0xfb+8.0x37+4.Ri,4.Rm+4.Sm,2.0,1.Z,1.0:D2h:::fmov
392 1.1 christos "fmov"
393 1.1 christos *am33_2
394 1.1 christos {
395 1.1 christos PC = cia;
396 1.1 christos
397 1.1 christos if (FPU_DISABLED)
398 1.1 christos fpu_disabled_exception (SD, CPU, cia);
399 1.1 christos else
400 1.1 christos {
401 1.1 christos int ri = translate_rreg (SD_, Ri);
402 1.1 christos int rm = translate_rreg (SD_, Rm);
403 1.1 christos store_word (State.regs[ri] + State.regs[rm], XS2FS (Z, Sm));
404 1.1 christos }
405 1.1 christos }
406 1.1 christos
407 1.1 christos // 1111 1101 0010 000X Rm.. Sn.. d24; fmov (d24,Rm),FSn
408 1.1 christos 8.0xfd+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::fmov
409 1.1 christos "fmov"
410 1.1 christos *am33_2
411 1.1 christos {
412 1.1 christos PC = cia;
413 1.1 christos
414 1.1 christos if (FPU_DISABLED)
415 1.1 christos fpu_disabled_exception (SD, CPU, cia);
416 1.1 christos else
417 1.1 christos {
418 1.1 christos int reg = translate_rreg (SD_, Rm);
419 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg]
420 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
421 1.1 christos IMM24B, IMM24C)));
422 1.1 christos }
423 1.1 christos }
424 1.1 christos
425 1.1 christos // 1111 1101 0010 001X Rm.. Sn.. d24; fmov (Rm+,imm24),FSn
426 1.1 christos 8.0xfd+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4b:::fmov
427 1.1 christos "fmov"
428 1.1 christos *am33_2
429 1.1 christos {
430 1.1 christos PC = cia;
431 1.1 christos
432 1.1 christos if (FPU_DISABLED)
433 1.1 christos fpu_disabled_exception (SD, CPU, cia);
434 1.1 christos else
435 1.1 christos {
436 1.1 christos int reg = translate_rreg (SD_, Rm);
437 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg]
438 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
439 1.1 christos IMM24B, IMM24C)));
440 1.1 christos State.regs[reg] += 4;
441 1.1 christos }
442 1.1 christos }
443 1.1 christos
444 1.1 christos // 1111 1101 0010 010X ---- Sn.. d24; fmov (d24,SP),FSn
445 1.1 christos 8.0xfd+4.2,3.2,1.X+4.0,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4c:::fmov
446 1.1 christos "fmov"
447 1.1 christos *am33_2
448 1.1 christos {
449 1.1 christos PC = cia;
450 1.1 christos
451 1.1 christos if (FPU_DISABLED)
452 1.1 christos fpu_disabled_exception (SD, CPU, cia);
453 1.1 christos else
454 1.1 christos {
455 1.1 christos int reg = REG_SP;
456 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg] + FETCH24 (IMM24A,
457 1.1 christos IMM24B, IMM24C));
458 1.1 christos }
459 1.1 christos }
460 1.1 christos
461 1.1 christos // 1111 1101 0011 00Y0 Sm.. Rn.. d24; fmov FSm,(d24,Rn)
462 1.1 christos 8.0xfd+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4e:::fmov
463 1.1 christos "fmov"
464 1.1 christos *am33_2
465 1.1 christos {
466 1.1 christos PC = cia;
467 1.1 christos
468 1.1 christos if (FPU_DISABLED)
469 1.1 christos fpu_disabled_exception (SD, CPU, cia);
470 1.1 christos else
471 1.1 christos {
472 1.1 christos int reg = translate_rreg (SD_, Rn);
473 1.1 christos store_word (State.regs[reg]
474 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
475 1.1 christos IMM24B, IMM24C)), XS2FS (Y, Sm));
476 1.1 christos }
477 1.1 christos }
478 1.1 christos
479 1.1 christos // 1111 1101 0011 00Y1 Sm.. Rn.. d24; fmov FSm,(Rn+,d24)
480 1.1 christos 8.0xfd+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4f:::fmov
481 1.1 christos "fmov"
482 1.1 christos *am33_2
483 1.1 christos {
484 1.1 christos PC = cia;
485 1.1 christos
486 1.1 christos if (FPU_DISABLED)
487 1.1 christos fpu_disabled_exception (SD, CPU, cia);
488 1.1 christos else
489 1.1 christos {
490 1.1 christos int reg = translate_rreg (SD_, Rn);
491 1.1 christos store_word (State.regs[reg]
492 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
493 1.1 christos IMM24B, IMM24C)), XS2FS (Y, Sm));
494 1.1 christos State.regs[reg] += 4;
495 1.1 christos }
496 1.1 christos }
497 1.1 christos
498 1.1 christos // 1111 1101 0011 01Y0 Sm.. ---- d24; fmov FSm,(d24,SP)
499 1.1 christos 8.0xfd+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4g:::fmov
500 1.1 christos "fmov"
501 1.1 christos *am33_2
502 1.1 christos {
503 1.1 christos PC = cia;
504 1.1 christos
505 1.1 christos if (FPU_DISABLED)
506 1.1 christos fpu_disabled_exception (SD, CPU, cia);
507 1.1 christos else
508 1.1 christos {
509 1.1 christos int reg = REG_SP;
510 1.1 christos store_word (State.regs[reg]
511 1.1 christos + FETCH24 (IMM24A,
512 1.1 christos IMM24B, IMM24C), XS2FS (Y, Sm));
513 1.1 christos }
514 1.1 christos }
515 1.1 christos
516 1.1 christos // 1111 1110 0010 000X Rm.. Sn.. d32; fmov (d32,Rm),FSn
517 1.1 christos 8.0xfe+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::fmov
518 1.1 christos "fmov"
519 1.1 christos *am33_2
520 1.1 christos {
521 1.1 christos PC = cia;
522 1.1 christos
523 1.1 christos if (FPU_DISABLED)
524 1.1 christos fpu_disabled_exception (SD, CPU, cia);
525 1.1 christos else
526 1.1 christos {
527 1.1 christos int reg = translate_rreg (SD_, Rm);
528 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg]
529 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
530 1.1 christos IMM32C, IMM32D)));
531 1.1 christos }
532 1.1 christos }
533 1.1 christos
534 1.1 christos // 1111 1110 0010 001X Rm.. Sn.. d32; fmov (Rm+,imm32),FSn
535 1.1 christos 8.0xfe+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5b:::fmov
536 1.1 christos "fmov"
537 1.1 christos *am33_2
538 1.1 christos {
539 1.1 christos PC = cia;
540 1.1 christos
541 1.1 christos if (FPU_DISABLED)
542 1.1 christos fpu_disabled_exception (SD, CPU, cia);
543 1.1 christos else
544 1.1 christos {
545 1.1 christos int reg = translate_rreg (SD_, Rm);
546 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg]
547 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
548 1.1 christos IMM32C, IMM32D)));
549 1.1 christos State.regs[reg] += 4;
550 1.1 christos }
551 1.1 christos }
552 1.1 christos
553 1.1 christos // 1111 1110 0010 010X ---- Sn.. d32; fmov (d32,SP),FSn
554 1.1 christos 8.0xfe+4.2,3.2,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5c:::fmov
555 1.1 christos "fmov"
556 1.1 christos *am33_2
557 1.1 christos {
558 1.1 christos PC = cia;
559 1.1 christos
560 1.1 christos if (FPU_DISABLED)
561 1.1 christos fpu_disabled_exception (SD, CPU, cia);
562 1.1 christos else
563 1.1 christos {
564 1.1 christos int reg = REG_SP;
565 1.1 christos XS2FS (X, Sn) = load_word (State.regs[reg]
566 1.1 christos + FETCH32 (IMM32A, IMM32B,
567 1.1 christos IMM32C, IMM32D));
568 1.1 christos }
569 1.1 christos }
570 1.1 christos
571 1.1 christos // 1111 1110 0010 011X ---- Sn.. d32; fmov imm32,FSn
572 1.1 christos 8.0xfe+4.2,3.3,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5d:::fmov
573 1.1 christos "fmov"
574 1.1 christos *am33_2
575 1.1 christos {
576 1.1 christos PC = cia;
577 1.1 christos
578 1.1 christos if (FPU_DISABLED)
579 1.1 christos fpu_disabled_exception (SD, CPU, cia);
580 1.1 christos else
581 1.1 christos XS2FS (X, Sn) = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
582 1.1 christos }
583 1.1 christos
584 1.1 christos // 1111 1110 0011 00Y0 Sm.. Rn.. d32; fmov FSm,(d32,Rn)
585 1.1 christos 8.0xfe+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5e:::fmov
586 1.1 christos "fmov"
587 1.1 christos *am33_2
588 1.1 christos {
589 1.1 christos PC = cia;
590 1.1 christos
591 1.1 christos if (FPU_DISABLED)
592 1.1 christos fpu_disabled_exception (SD, CPU, cia);
593 1.1 christos else
594 1.1 christos {
595 1.1 christos int reg = translate_rreg (SD_, Rn);
596 1.1 christos store_word (State.regs[reg]
597 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
598 1.1 christos IMM32C, IMM32D)), XS2FS (Y, Sm));
599 1.1 christos }
600 1.1 christos }
601 1.1 christos
602 1.1 christos // 1111 1110 0011 00Y1 Sm.. Rn.. d32; fmov FSm,(Rn+,d32)
603 1.1 christos 8.0xfe+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5f:::fmov
604 1.1 christos "fmov"
605 1.1 christos *am33_2
606 1.1 christos {
607 1.1 christos PC = cia;
608 1.1 christos
609 1.1 christos if (FPU_DISABLED)
610 1.1 christos fpu_disabled_exception (SD, CPU, cia);
611 1.1 christos else
612 1.1 christos {
613 1.1 christos int reg = translate_rreg (SD_, Rn);
614 1.1 christos store_word (State.regs[reg]
615 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
616 1.1 christos IMM32C, IMM32D)), XS2FS (Y, Sm));
617 1.1 christos State.regs[reg] += 4;
618 1.1 christos }
619 1.1 christos }
620 1.1 christos
621 1.1 christos // 1111 1110 0011 01Y0 Sm.. ---- d32; fmov FSm,(d32,SP)
622 1.1 christos 8.0xfe+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5g:::fmov
623 1.1 christos "fmov"
624 1.1 christos *am33_2
625 1.1 christos {
626 1.1 christos PC = cia;
627 1.1 christos
628 1.1 christos if (FPU_DISABLED)
629 1.1 christos fpu_disabled_exception (SD, CPU, cia);
630 1.1 christos else
631 1.1 christos {
632 1.1 christos int reg = REG_SP;
633 1.1 christos store_word (State.regs[reg]
634 1.1 christos + FETCH32 (IMM32A, IMM32B,
635 1.1 christos IMM32C, IMM32D), XS2FS (Y, Sm));
636 1.1 christos }
637 1.1 christos }
638 1.1 christos
639 1.1 christos // double precision fmov:
640 1.1 christos
641 1.1 christos // 1111 1001 1010 000X Rm.. fn.-; fmov (Rm),FDn
642 1.1 christos 8.0xf9+4.0xa,3.0,1.X+4.Rm,3.fn,1.0:D1j:::fmov
643 1.1 christos "fmov"
644 1.1 christos *am33_2
645 1.1 christos {
646 1.1 christos PC = cia;
647 1.1 christos
648 1.1 christos if (FPU_DISABLED)
649 1.1 christos fpu_disabled_exception (SD, CPU, cia);
650 1.1 christos else
651 1.1 christos {
652 1.1 christos int reg = translate_rreg (SD_, Rm);
653 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]);
654 1.1 christos }
655 1.1 christos }
656 1.1 christos
657 1.1 christos // 1111 1001 1010 001X Rm.. fn.-; fmov (Rm+),FDn
658 1.1 christos 8.0xf9+4.0xa,3.1,1.X+4.Rm,3.fn,1.0:D1k:::fmov
659 1.1 christos "fmov"
660 1.1 christos *am33_2
661 1.1 christos {
662 1.1 christos PC = cia;
663 1.1 christos
664 1.1 christos if (FPU_DISABLED)
665 1.1 christos fpu_disabled_exception (SD, CPU, cia);
666 1.1 christos else
667 1.1 christos {
668 1.1 christos int reg = translate_rreg (SD_, Rm);
669 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]);
670 1.1 christos State.regs[reg] += 8;
671 1.1 christos }
672 1.1 christos }
673 1.1 christos
674 1.1 christos // 1111 1001 1010 010X ---- fn.-; fmov (SP),FDn
675 1.1 christos 8.0xf9+4.0xa,3.2,1.X+4.0,3.fn,1.0:D1l:::fmov
676 1.1 christos "fmov"
677 1.1 christos *am33_2
678 1.1 christos {
679 1.1 christos PC = cia;
680 1.1 christos
681 1.1 christos if (FPU_DISABLED)
682 1.1 christos fpu_disabled_exception (SD, CPU, cia);
683 1.1 christos else
684 1.1 christos {
685 1.1 christos int reg = REG_SP;
686 1.1 christos Xf2FD (X,fn) = load_dword (State.regs[reg]);
687 1.1 christos }
688 1.1 christos }
689 1.1 christos
690 1.1 christos // 1111 1001 1011 00Y0 fm.- Rn..; fmov FDm,(Rn)
691 1.1 christos 8.0xf9+4.0xb,2.0,1.Y,1.0+3.fm,1.0,4.Rn:D1m:::fmov
692 1.1 christos "fmov"
693 1.1 christos *am33_2
694 1.1 christos {
695 1.1 christos PC = cia;
696 1.1 christos
697 1.1 christos if (FPU_DISABLED)
698 1.1 christos fpu_disabled_exception (SD, CPU, cia);
699 1.1 christos else
700 1.1 christos {
701 1.1 christos int reg = translate_rreg (SD_, Rn);
702 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm));
703 1.1 christos }
704 1.1 christos }
705 1.1 christos
706 1.1 christos // 1111 1001 1011 00Y1 fm.- Rn..; fmov FDm,(Rn+)
707 1.1 christos 8.0xf9+4.0xb,2.0,1.Y,1.1+3.fm,1.0,4.Rn:D1n:::fmov
708 1.1 christos "fmov"
709 1.1 christos *am33_2
710 1.1 christos {
711 1.1 christos PC = cia;
712 1.1 christos
713 1.1 christos if (FPU_DISABLED)
714 1.1 christos fpu_disabled_exception (SD, CPU, cia);
715 1.1 christos else
716 1.1 christos {
717 1.1 christos int reg = translate_rreg (SD_, Rn);
718 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm));
719 1.1 christos State.regs[reg] += 8;
720 1.1 christos }
721 1.1 christos }
722 1.1 christos
723 1.1 christos // 1111 1001 1011 01Y0 fm.- ----; fmov FDm,(SP)
724 1.1 christos 8.0xf9+4.0xb,2.1,1.Y,1.0+3.fm,1.0,4.0:D1o:::fmov
725 1.1 christos "fmov"
726 1.1 christos *am33_2
727 1.1 christos {
728 1.1 christos PC = cia;
729 1.1 christos
730 1.1 christos if (FPU_DISABLED)
731 1.1 christos fpu_disabled_exception (SD, CPU, cia);
732 1.1 christos else
733 1.1 christos {
734 1.1 christos int reg = REG_SP;
735 1.1 christos store_dword (State.regs[reg], Xf2FD (Y,fm));
736 1.1 christos }
737 1.1 christos }
738 1.1 christos
739 1.1 christos // 1111 1001 1100 00YX fm.- fn.-; fmov FDm,FDn
740 1.1 christos 8.0xf9+4.0xc,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1p:::fmov
741 1.1 christos "fmov"
742 1.1 christos *am33_2
743 1.1 christos {
744 1.1 christos PC = cia;
745 1.1 christos
746 1.1 christos if (FPU_DISABLED)
747 1.1 christos fpu_disabled_exception (SD, CPU, cia);
748 1.1 christos else
749 1.1 christos fpu_unimp_exception (SD, CPU, cia);
750 1.1 christos }
751 1.1 christos
752 1.1 christos // 1111 1011 0100 0111 Ri.. Rm.. fn.- --Z-; fmov (Ri,Rm),FDn
753 1.1 christos 8.0xfb+8.0x47+4.Ri,4.Rm+3.fn,1.0,2.0,1.Z,1.0:D2i:::fmov
754 1.1 christos "fmov"
755 1.1 christos *am33_2
756 1.1 christos {
757 1.1 christos PC = cia;
758 1.1 christos
759 1.1 christos if (FPU_DISABLED)
760 1.1 christos fpu_disabled_exception (SD, CPU, cia);
761 1.1 christos else
762 1.1 christos {
763 1.1 christos int ri = translate_rreg (SD_, Ri);
764 1.1 christos int rm = translate_rreg (SD_, Rm);
765 1.1 christos Xf2FD (Z,fn) = load_dword (State.regs[ri] + State.regs[rm]);
766 1.1 christos }
767 1.1 christos }
768 1.1 christos
769 1.1 christos // 1111 1011 0101 0111 Ri.. Rn.. fm.- --Z-; fmov FDm,(Ri,Rn)
770 1.1 christos 8.0xfb+8.0x57+4.Ri,4.Rn+3.fm,1.0,2.0,1.Z,1.0:D2j:::fmov
771 1.1 christos "fmov"
772 1.1 christos *am33_2
773 1.1 christos {
774 1.1 christos PC = cia;
775 1.1 christos
776 1.1 christos if (FPU_DISABLED)
777 1.1 christos fpu_disabled_exception (SD, CPU, cia);
778 1.1 christos else
779 1.1 christos {
780 1.1 christos int ri = translate_rreg (SD_, Ri);
781 1.1 christos int rn = translate_rreg (SD_, Rn);
782 1.1 christos store_dword (State.regs[ri] + State.regs[rn], Xf2FD (Z,fm));
783 1.1 christos }
784 1.1 christos }
785 1.1 christos
786 1.1 christos // 1111 1011 1010 000X Rm.. fn.- d8; fmov (d8,Rm),FDn
787 1.1 christos 8.0xfb+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM8:D2k:::fmov
788 1.1 christos "fmov"
789 1.1 christos *am33_2
790 1.1 christos {
791 1.1 christos PC = cia;
792 1.1 christos
793 1.1 christos if (FPU_DISABLED)
794 1.1 christos fpu_disabled_exception (SD, CPU, cia);
795 1.1 christos else
796 1.1 christos {
797 1.1 christos int reg = translate_rreg (SD_, Rm);
798 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8));
799 1.1 christos }
800 1.1 christos }
801 1.1 christos
802 1.1 christos // 1111 1011 1010 001X Rm.. fn.- d8; fmov (Rm+,imm8),FDn
803 1.1 christos 8.0xfb+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM8:D2l:::fmov
804 1.1 christos "fmov"
805 1.1 christos *am33_2
806 1.1 christos {
807 1.1 christos PC = cia;
808 1.1 christos
809 1.1 christos if (FPU_DISABLED)
810 1.1 christos fpu_disabled_exception (SD, CPU, cia);
811 1.1 christos else
812 1.1 christos {
813 1.1 christos int reg = translate_rreg (SD_, Rm);
814 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8));
815 1.1 christos State.regs[reg] += 8;
816 1.1 christos }
817 1.1 christos }
818 1.1 christos
819 1.1 christos // 1111 1011 1010 010X ---- fn.- d8; fmov (d8,SP),FDn
820 1.1 christos 8.0xfb+4.0xa,3.2,1.X+4.0,4.fn+8.IMM8:D2m:::fmov
821 1.1 christos "fmov"
822 1.1 christos *am33_2
823 1.1 christos {
824 1.1 christos PC = cia;
825 1.1 christos
826 1.1 christos if (FPU_DISABLED)
827 1.1 christos fpu_disabled_exception (SD, CPU, cia);
828 1.1 christos else
829 1.1 christos {
830 1.1 christos int reg = REG_SP;
831 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg] + IMM8);
832 1.1 christos }
833 1.1 christos }
834 1.1 christos
835 1.1 christos // 1111 1011 1011 00Y0 fm.- Rn.. d8; fmov FDm,(d8,Rn)
836 1.1 christos 8.0xfb+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM8:D2n:::fmov
837 1.1 christos "fmov"
838 1.1 christos *am33_2
839 1.1 christos {
840 1.1 christos PC = cia;
841 1.1 christos
842 1.1 christos if (FPU_DISABLED)
843 1.1 christos fpu_disabled_exception (SD, CPU, cia);
844 1.1 christos else
845 1.1 christos {
846 1.1 christos int reg = translate_rreg (SD_, Rn);
847 1.1 christos store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm));
848 1.1 christos }
849 1.1 christos }
850 1.1 christos
851 1.1 christos // 1111 1011 1011 00Y1 fm.- Rn.. d8; fmov FDm,(Rn+,d8)
852 1.1 christos 8.0xfb+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM8:D2o:::fmov
853 1.1 christos "fmov"
854 1.1 christos *am33_2
855 1.1 christos {
856 1.1 christos PC = cia;
857 1.1 christos
858 1.1 christos if (FPU_DISABLED)
859 1.1 christos fpu_disabled_exception (SD, CPU, cia);
860 1.1 christos else
861 1.1 christos {
862 1.1 christos int reg = translate_rreg (SD_, Rn);
863 1.1 christos store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm));
864 1.1 christos State.regs[reg] += 8;
865 1.1 christos }
866 1.1 christos }
867 1.1 christos
868 1.1 christos // 1111 1011 1011 01Y0 fm.- ---- d8; fmov FDm,(d8,SP)
869 1.1 christos 8.0xfb+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM8:D2p:::fmov
870 1.1 christos "fmov"
871 1.1 christos *am33_2
872 1.1 christos {
873 1.1 christos PC = cia;
874 1.1 christos
875 1.1 christos if (FPU_DISABLED)
876 1.1 christos fpu_disabled_exception (SD, CPU, cia);
877 1.1 christos else
878 1.1 christos {
879 1.1 christos int reg = REG_SP;
880 1.1 christos store_dword (State.regs[reg] + IMM8, Xf2FD (Y, fm));
881 1.1 christos }
882 1.1 christos }
883 1.1 christos
884 1.1 christos // 1111 1101 1010 000X Rm.. fn.- d24; fmov (d24,Rm),FDn
885 1.1 christos 8.0xfd+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4k:::fmov
886 1.1 christos "fmov"
887 1.1 christos *am33_2
888 1.1 christos {
889 1.1 christos PC = cia;
890 1.1 christos
891 1.1 christos if (FPU_DISABLED)
892 1.1 christos fpu_disabled_exception (SD, CPU, cia);
893 1.1 christos else
894 1.1 christos {
895 1.1 christos int reg = translate_rreg (SD_, Rm);
896 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
897 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
898 1.1 christos IMM24B, IMM24C)));
899 1.1 christos }
900 1.1 christos }
901 1.1 christos
902 1.1 christos // 1111 1101 1010 001X Rm.. fn.- d24; fmov (Rm+,imm24),FDn
903 1.1 christos 8.0xfd+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4l:::fmov
904 1.1 christos "fmov"
905 1.1 christos *am33_2
906 1.1 christos {
907 1.1 christos PC = cia;
908 1.1 christos
909 1.1 christos if (FPU_DISABLED)
910 1.1 christos fpu_disabled_exception (SD, CPU, cia);
911 1.1 christos else
912 1.1 christos {
913 1.1 christos int reg = translate_rreg (SD_, Rm);
914 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
915 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
916 1.1 christos IMM24B, IMM24C)));
917 1.1 christos State.regs[reg] += 8;
918 1.1 christos }
919 1.1 christos }
920 1.1 christos
921 1.1 christos // 1111 1101 1010 010X ---- fn.- d24; fmov (d24,SP),FDn
922 1.1 christos 8.0xfd+4.0xa,3.2,1.X+4.0,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4m:::fmov
923 1.1 christos "fmov"
924 1.1 christos *am33_2
925 1.1 christos {
926 1.1 christos PC = cia;
927 1.1 christos
928 1.1 christos if (FPU_DISABLED)
929 1.1 christos fpu_disabled_exception (SD, CPU, cia);
930 1.1 christos else
931 1.1 christos {
932 1.1 christos int reg = REG_SP;
933 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
934 1.1 christos + FETCH24 (IMM24A,
935 1.1 christos IMM24B, IMM24C));
936 1.1 christos }
937 1.1 christos }
938 1.1 christos
939 1.1 christos // 1111 1101 1011 00Y0 fm.- Rn.. d24; fmov FDm,(d24,Rn)
940 1.1 christos 8.0xfd+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4n:::fmov
941 1.1 christos "fmov"
942 1.1 christos *am33_2
943 1.1 christos {
944 1.1 christos PC = cia;
945 1.1 christos
946 1.1 christos if (FPU_DISABLED)
947 1.1 christos fpu_disabled_exception (SD, CPU, cia);
948 1.1 christos else
949 1.1 christos {
950 1.1 christos int reg = translate_rreg (SD_, Rn);
951 1.1 christos store_dword (State.regs[reg]
952 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
953 1.1 christos IMM24B, IMM24C)), Xf2FD (Y, fm));
954 1.1 christos }
955 1.1 christos }
956 1.1 christos
957 1.1 christos // 1111 1101 1011 00Y1 fm.- Rn.. d24; fmov FDm,(Rn+,d24)
958 1.1 christos 8.0xfd+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4o:::fmov
959 1.1 christos "fmov"
960 1.1 christos *am33_2
961 1.1 christos {
962 1.1 christos PC = cia;
963 1.1 christos
964 1.1 christos if (FPU_DISABLED)
965 1.1 christos fpu_disabled_exception (SD, CPU, cia);
966 1.1 christos else
967 1.1 christos {
968 1.1 christos int reg = translate_rreg (SD_, Rn);
969 1.1 christos store_dword (State.regs[reg]
970 1.1 christos + EXTEND24 (FETCH24 (IMM24A,
971 1.1 christos IMM24B, IMM24C)), Xf2FD (Y, fm));
972 1.1 christos State.regs[reg] += 8;
973 1.1 christos }
974 1.1 christos }
975 1.1 christos
976 1.1 christos // 1111 1101 1011 01Y0 fm.- ---- d24; fmov FDm,(d24,SP)
977 1.1 christos 8.0xfd+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4p:::fmov
978 1.1 christos "fmov"
979 1.1 christos *am33_2
980 1.1 christos {
981 1.1 christos PC = cia;
982 1.1 christos
983 1.1 christos if (FPU_DISABLED)
984 1.1 christos fpu_disabled_exception (SD, CPU, cia);
985 1.1 christos else
986 1.1 christos {
987 1.1 christos int reg = REG_SP;
988 1.1 christos store_dword (State.regs[reg] + FETCH24 (IMM24A,
989 1.1 christos IMM24B, IMM24C), Xf2FD (Y, fm));
990 1.1 christos }
991 1.1 christos }
992 1.1 christos
993 1.1 christos // 1111 1110 1010 000X Rm.. fn.- d32; fmov (d32,Rm),FDn
994 1.1 christos 8.0xfe+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5k:::fmov
995 1.1 christos "fmov"
996 1.1 christos *am33_2
997 1.1 christos {
998 1.1 christos PC = cia;
999 1.1 christos
1000 1.1 christos if (FPU_DISABLED)
1001 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1002 1.1 christos else
1003 1.1 christos {
1004 1.1 christos int reg = translate_rreg (SD_, Rm);
1005 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
1006 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
1007 1.1 christos IMM32C, IMM32D)));
1008 1.1 christos }
1009 1.1 christos }
1010 1.1 christos
1011 1.1 christos // 1111 1110 1010 001X Rm.. fn.- d32; fmov (Rm+,imm32),FDn
1012 1.1 christos 8.0xfe+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5l:::fmov
1013 1.1 christos "fmov"
1014 1.1 christos *am33_2
1015 1.1 christos {
1016 1.1 christos PC = cia;
1017 1.1 christos
1018 1.1 christos if (FPU_DISABLED)
1019 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1020 1.1 christos else
1021 1.1 christos {
1022 1.1 christos int reg = translate_rreg (SD_, Rm);
1023 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
1024 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
1025 1.1 christos IMM32C, IMM32D)));
1026 1.1 christos State.regs[reg] += 8;
1027 1.1 christos }
1028 1.1 christos }
1029 1.1 christos
1030 1.1 christos // 1111 1110 1010 010X ---- fn.- d32; fmov (d32,SP),FDn
1031 1.1 christos 8.0xfe+4.0xa,3.2,1.X+4.0,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5m:::fmov
1032 1.1 christos "fmov"
1033 1.1 christos *am33_2
1034 1.1 christos {
1035 1.1 christos PC = cia;
1036 1.1 christos
1037 1.1 christos if (FPU_DISABLED)
1038 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1039 1.1 christos else
1040 1.1 christos {
1041 1.1 christos int reg = REG_SP;
1042 1.1 christos Xf2FD (X, fn) = load_dword (State.regs[reg]
1043 1.1 christos + FETCH32 (IMM32A, IMM32B,
1044 1.1 christos IMM32C, IMM32D));
1045 1.1 christos }
1046 1.1 christos }
1047 1.1 christos
1048 1.1 christos // 1111 1110 1011 00Y0 fm.- Rn.. d32; fmov FDm,(d32,Rn)
1049 1.1 christos 8.0xfe+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5n:::fmov
1050 1.1 christos "fmov"
1051 1.1 christos *am33_2
1052 1.1 christos {
1053 1.1 christos PC = cia;
1054 1.1 christos
1055 1.1 christos if (FPU_DISABLED)
1056 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1057 1.1 christos else
1058 1.1 christos {
1059 1.1 christos int reg = translate_rreg (SD_, Rn);
1060 1.1 christos store_dword (State.regs[reg]
1061 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
1062 1.1 christos IMM32C, IMM32D)), Xf2FD (Y, fm));
1063 1.1 christos }
1064 1.1 christos }
1065 1.1 christos
1066 1.1 christos // 1111 1110 1011 00Y1 fm.- Rn.. d32; fmov FDm,(Rn+,d32)
1067 1.1 christos 8.0xfe+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5o:::fmov
1068 1.1 christos "fmov"
1069 1.1 christos *am33_2
1070 1.1 christos {
1071 1.1 christos PC = cia;
1072 1.1 christos
1073 1.1 christos if (FPU_DISABLED)
1074 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1075 1.1 christos else
1076 1.1 christos {
1077 1.1 christos int reg = translate_rreg (SD_, Rn);
1078 1.1 christos store_dword (State.regs[reg]
1079 1.1 christos + EXTEND32 (FETCH32 (IMM32A, IMM32B,
1080 1.1 christos IMM32C, IMM32D)), Xf2FD (Y, fm));
1081 1.1 christos State.regs[reg] += 8;
1082 1.1 christos }
1083 1.1 christos }
1084 1.1 christos
1085 1.1 christos // 1111 1110 1011 01Y0 fm.- ---- d32; fmov FDm,(d32,SP)
1086 1.1 christos 8.0xfe+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5p:::fmov
1087 1.1 christos "fmov"
1088 1.1 christos *am33_2
1089 1.1 christos {
1090 1.1 christos PC = cia;
1091 1.1 christos
1092 1.1 christos if (FPU_DISABLED)
1093 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1094 1.1 christos else
1095 1.1 christos {
1096 1.1 christos int reg = REG_SP;
1097 1.1 christos store_dword (State.regs[reg]
1098 1.1 christos + FETCH32 (IMM32A, IMM32B,
1099 1.1 christos IMM32C, IMM32D), Xf2FD (Y, fm));
1100 1.1 christos }
1101 1.1 christos }
1102 1.1 christos
1103 1.1 christos // FPCR fmov:
1104 1.1 christos
1105 1.1 christos // 1111 1001 1011 0101 Rm.. ----; fmov Rm,FPCR
1106 1.1 christos 8.0xf9+8.0xb5+4.Rm,4.0:D1q:::fmov
1107 1.1 christos "fmov"
1108 1.1 christos *am33_2
1109 1.1 christos {
1110 1.1 christos PC = cia;
1111 1.1 christos
1112 1.1 christos if (FPU_DISABLED)
1113 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1114 1.1 christos else
1115 1.1 christos {
1116 1.1 christos int reg = translate_rreg (SD_, Rm);
1117 1.6 christos uint32_t val = State.regs[reg];
1118 1.1 christos FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK))
1119 1.1 christos | ((FPCR & ~val) & EF_MASK);
1120 1.1 christos }
1121 1.1 christos }
1122 1.1 christos
1123 1.1 christos // 1111 1001 1011 0111 ---- Rn..; fmov FPCR,Rn
1124 1.1 christos 8.0xf9+8.0xb7+4.0,4.Rn:D1r:::fmov
1125 1.1 christos "fmov"
1126 1.1 christos *am33_2
1127 1.1 christos {
1128 1.1 christos PC = cia;
1129 1.1 christos
1130 1.1 christos if (FPU_DISABLED)
1131 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1132 1.1 christos else
1133 1.1 christos {
1134 1.1 christos int reg = translate_rreg (SD_, Rn);
1135 1.1 christos State.regs[reg] = FPCR & FPCR_MASK;
1136 1.1 christos }
1137 1.1 christos }
1138 1.1 christos
1139 1.1 christos // 1111 1101 1011 0101 imm32; fmov imm32,FPCR
1140 1.1 christos 8.0xfd+8.0xb5+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmov
1141 1.1 christos "fmov"
1142 1.1 christos *am33_2
1143 1.1 christos {
1144 1.1 christos PC = cia;
1145 1.1 christos
1146 1.1 christos if (FPU_DISABLED)
1147 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1148 1.1 christos else
1149 1.1 christos {
1150 1.6 christos uint32_t val = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1151 1.1 christos FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK))
1152 1.1 christos | ((FPCR & ~val) & EF_MASK);
1153 1.1 christos }
1154 1.1 christos }
1155 1.1 christos
1156 1.1 christos // fabs:
1157 1.1 christos
1158 1.1 christos // 1111 1001 0100 010X ---- Sn..; fabs FSn
1159 1.1 christos 8.0xf9+4.4,3.2,1.X+4.0,4.Sn:D1a:::fabs
1160 1.1 christos "fabs"
1161 1.1 christos *am33_2
1162 1.1 christos {
1163 1.1 christos PC = cia;
1164 1.1 christos
1165 1.1 christos if (FPU_DISABLED)
1166 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1167 1.1 christos else
1168 1.1 christos {
1169 1.1 christos sim_fpu in, out;
1170 1.1 christos
1171 1.1 christos FS2FPU (XS2FS (X,Sn), in);
1172 1.1 christos sim_fpu_abs (&out, &in);
1173 1.1 christos FPU2FS (out, XS2FS (X,Sn));
1174 1.1 christos }
1175 1.1 christos }
1176 1.1 christos
1177 1.1 christos // 1111 1001 1100 010X ---- Sn..; fabs FDn
1178 1.1 christos 8.0xf9+4.0xc,3.2,1.X+4.0,3.fn,1.0:D1b:::fabs
1179 1.1 christos "fabs"
1180 1.1 christos *am33_2
1181 1.1 christos {
1182 1.1 christos PC = cia;
1183 1.1 christos
1184 1.1 christos if (FPU_DISABLED)
1185 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1186 1.1 christos else
1187 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1188 1.1 christos }
1189 1.1 christos
1190 1.1 christos // 1111 1011 0100 0100 Sm.. ---- Sn.. X-Z-; fabs FSm,FSn
1191 1.1 christos 8.0xfb+8.0x44+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fabs
1192 1.1 christos "fabs"
1193 1.1 christos *am33_2
1194 1.1 christos {
1195 1.1 christos PC = cia;
1196 1.1 christos
1197 1.1 christos if (FPU_DISABLED)
1198 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1199 1.1 christos else
1200 1.1 christos {
1201 1.1 christos sim_fpu in, out;
1202 1.1 christos
1203 1.1 christos FS2FPU (XS2FS (X,Sm), in);
1204 1.1 christos sim_fpu_abs (&out, &in);
1205 1.1 christos FPU2FS (out, XS2FS (Z,Sn));
1206 1.1 christos }
1207 1.1 christos }
1208 1.1 christos
1209 1.1 christos // 1111 1011 1100 0100 fm.- ---- fn.- X-Z-; fabs FDm,FDn
1210 1.1 christos 8.0xfb+8.0xc4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fabs
1211 1.1 christos "fabs"
1212 1.1 christos *am33_2
1213 1.1 christos {
1214 1.1 christos PC = cia;
1215 1.1 christos
1216 1.1 christos if (FPU_DISABLED)
1217 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1218 1.1 christos else
1219 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1220 1.1 christos }
1221 1.1 christos
1222 1.1 christos // 1111 1001 0100 011X ---- Sn..; fneg FSn
1223 1.1 christos 8.0xf9+4.4,3.3,1.X+4.0,4.Sn:D1a:::fneg
1224 1.1 christos "fneg"
1225 1.1 christos *am33_2
1226 1.1 christos {
1227 1.1 christos PC = cia;
1228 1.1 christos
1229 1.1 christos if (FPU_DISABLED)
1230 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1231 1.1 christos else
1232 1.1 christos {
1233 1.1 christos sim_fpu in, out;
1234 1.1 christos
1235 1.1 christos FS2FPU (XS2FS (X,Sn), in);
1236 1.1 christos sim_fpu_neg (&out, &in);
1237 1.1 christos FPU2FS (out, XS2FS (X,Sn));
1238 1.1 christos }
1239 1.1 christos }
1240 1.1 christos
1241 1.1 christos // 1111 1001 1100 011X ---- Sn..; fneg FDn
1242 1.1 christos 8.0xf9+4.0xc,3.3,1.X+4.0,3.fn,1.0:D1b:::fneg
1243 1.1 christos "fneg"
1244 1.1 christos *am33_2
1245 1.1 christos {
1246 1.1 christos PC = cia;
1247 1.1 christos
1248 1.1 christos if (FPU_DISABLED)
1249 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1250 1.1 christos else
1251 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1252 1.1 christos }
1253 1.1 christos
1254 1.1 christos // 1111 1011 0100 0110 Sm.. ---- Sn.. X-Z-; fneg FSm,FSn
1255 1.1 christos 8.0xfb+8.0x46+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fneg
1256 1.1 christos "fneg"
1257 1.1 christos *am33_2
1258 1.1 christos {
1259 1.1 christos PC = cia;
1260 1.1 christos
1261 1.1 christos if (FPU_DISABLED)
1262 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1263 1.1 christos else
1264 1.1 christos {
1265 1.1 christos sim_fpu in, out;
1266 1.1 christos
1267 1.1 christos FS2FPU (XS2FS (X,Sm), in);
1268 1.1 christos sim_fpu_neg (&out, &in);
1269 1.1 christos FPU2FS (out, XS2FS (Z,Sn));
1270 1.1 christos }
1271 1.1 christos }
1272 1.1 christos
1273 1.1 christos // 1111 1011 1100 0110 fm.- ---- fn.- X-Z-; fneg FDm,FDn
1274 1.1 christos 8.0xfb+8.0xc6+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fneg
1275 1.1 christos "fneg"
1276 1.1 christos *am33_2
1277 1.1 christos {
1278 1.1 christos PC = cia;
1279 1.1 christos
1280 1.1 christos if (FPU_DISABLED)
1281 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1282 1.1 christos else
1283 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1284 1.1 christos }
1285 1.1 christos
1286 1.1 christos // 1111 1001 0101 000X ---- Sn..; frsqrt FSn
1287 1.1 christos 8.0xf9+4.5,3.0,1.X+4.0,4.Sn:D1a:::frsqrt
1288 1.1 christos "frsqrt"
1289 1.1 christos *am33_2
1290 1.1 christos {
1291 1.1 christos PC = cia;
1292 1.1 christos
1293 1.1 christos if (FPU_DISABLED)
1294 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1295 1.1 christos else
1296 1.1 christos fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
1297 1.1 christos }
1298 1.1 christos
1299 1.1 christos // 1111 1001 1101 000X ---- fn.-; frsqrt FDn
1300 1.1 christos 8.0xf9+4.0xd,3.0,1.X+4.0,3.fn,1.0:D1b:::frsqrt
1301 1.1 christos "frsqrt"
1302 1.1 christos *am33_2
1303 1.1 christos {
1304 1.1 christos PC = cia;
1305 1.1 christos
1306 1.1 christos if (FPU_DISABLED)
1307 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1308 1.1 christos else
1309 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1310 1.1 christos }
1311 1.1 christos
1312 1.1 christos // 1111 1011 0101 0000 Sm.. ---- Sn.. X-Z-; frsqrt FSm,FSn
1313 1.1 christos 8.0xfb+8.0x50+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::frsqrt
1314 1.1 christos "frsqrt"
1315 1.1 christos *am33_2
1316 1.1 christos {
1317 1.1 christos PC = cia;
1318 1.1 christos
1319 1.1 christos if (FPU_DISABLED)
1320 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1321 1.1 christos else
1322 1.1 christos fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sm), &XS2FS (Z,Sn), FP_SINGLE);
1323 1.1 christos }
1324 1.1 christos
1325 1.1 christos // 1111 1011 1101 0000 fm.- ---- fn.- X-Z-; frsqrt FDm,FDn
1326 1.1 christos 8.0xfb+8.0xd0+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::frsqrt
1327 1.1 christos "frsqrt"
1328 1.1 christos *am33_2
1329 1.1 christos {
1330 1.1 christos PC = cia;
1331 1.1 christos
1332 1.1 christos if (FPU_DISABLED)
1333 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1334 1.1 christos else
1335 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1336 1.1 christos }
1337 1.1 christos
1338 1.1 christos // 1111 1001 0101 001X ---- Sn..; fsqrt FSn
1339 1.1 christos 8.0xf9+4.5,3.1,1.X+4.0,4.Sn:D1a:::fsqrt
1340 1.1 christos "fsqrt"
1341 1.1 christos *am33_2
1342 1.1 christos {
1343 1.1 christos PC = cia;
1344 1.1 christos
1345 1.1 christos if (FPU_DISABLED)
1346 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1347 1.1 christos else
1348 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1349 1.1 christos }
1350 1.1 christos
1351 1.1 christos // 1111 1001 1101 001X ---- fn.-; fsqrt FDn
1352 1.1 christos 8.0xf9+4.0xd,3.1,1.X+4.0,3.fn,1.0:D1b:::fsqrt
1353 1.1 christos "fsqrt"
1354 1.1 christos *am33_2
1355 1.1 christos {
1356 1.1 christos PC = cia;
1357 1.1 christos
1358 1.1 christos if (FPU_DISABLED)
1359 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1360 1.1 christos else
1361 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1362 1.1 christos }
1363 1.1 christos
1364 1.1 christos // 1111 1011 0101 0100 Sm.. ---- Sn.. X-Z-; fsqrt FSm,FSn
1365 1.1 christos 8.0xfb+8.0x54+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fsqrt
1366 1.1 christos "fsqrt"
1367 1.1 christos *am33_2
1368 1.1 christos {
1369 1.1 christos PC = cia;
1370 1.1 christos
1371 1.1 christos if (FPU_DISABLED)
1372 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1373 1.1 christos else
1374 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1375 1.1 christos }
1376 1.1 christos
1377 1.1 christos // 1111 1011 1101 0100 fm.- ---- fn.- X-Z-; fsqrt FDm,FDn
1378 1.1 christos 8.0xfb+8.0xd4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fsqrt
1379 1.1 christos "fsqrt"
1380 1.1 christos *am33_2
1381 1.1 christos {
1382 1.1 christos PC = cia;
1383 1.1 christos
1384 1.1 christos if (FPU_DISABLED)
1385 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1386 1.1 christos else
1387 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1388 1.1 christos }
1389 1.1 christos
1390 1.1 christos // 1111 1001 0101 01YX Sm.. Sn..; fcmp FSm, FSn
1391 1.1 christos 8.0xf9+4.5,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fcmp
1392 1.1 christos "fcmp"
1393 1.1 christos *am33_2
1394 1.1 christos {
1395 1.1 christos PC = cia;
1396 1.1 christos
1397 1.1 christos if (FPU_DISABLED)
1398 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1399 1.1 christos else
1400 1.1 christos fpu_cmp (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (Y,Sm), FP_SINGLE);
1401 1.1 christos }
1402 1.1 christos
1403 1.1 christos // 1111 1001 1101 01YX fm.- fn.-; fcmp FDm, FDn
1404 1.1 christos 8.0xf9+4.0xd,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fcmp
1405 1.1 christos "fcmp"
1406 1.1 christos *am33_2
1407 1.1 christos {
1408 1.1 christos PC = cia;
1409 1.1 christos
1410 1.1 christos if (FPU_DISABLED)
1411 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1412 1.1 christos else
1413 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1414 1.1 christos }
1415 1.1 christos
1416 1.1 christos // 1111 1110 0011 01Y1 Sm.. ---- IMM32; fcmp imm32, FSm
1417 1.1 christos 8.0xfe+4.3,2.1,1.Y,1.1+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fcmp
1418 1.1 christos "fcmp"
1419 1.1 christos *am33_2
1420 1.1 christos {
1421 1.1 christos PC = cia;
1422 1.1 christos
1423 1.1 christos if (FPU_DISABLED)
1424 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1425 1.1 christos else
1426 1.1 christos {
1427 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1428 1.1 christos
1429 1.1 christos fpu_cmp (SD, CPU, cia, &XS2FS (Y,Sm), &imm, FP_SINGLE);
1430 1.1 christos }
1431 1.1 christos }
1432 1.1 christos
1433 1.1 christos // 1111 1001 0110 00YX Sm.. Sn..; fadd FSm, FSn
1434 1.1 christos 8.0xf9+4.6,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fadd
1435 1.1 christos "fadd"
1436 1.1 christos *am33_2
1437 1.1 christos {
1438 1.1 christos PC = cia;
1439 1.1 christos
1440 1.1 christos if (FPU_DISABLED)
1441 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1442 1.1 christos else
1443 1.1 christos fpu_add (SD, CPU, cia,
1444 1.1 christos &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
1445 1.1 christos }
1446 1.1 christos
1447 1.1 christos // 1111 1001 1110 00YX fm.- fn.-; fadd FDm, FDn
1448 1.1 christos 8.0xf9+4.0xe,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fadd
1449 1.1 christos "fadd"
1450 1.1 christos *am33_2
1451 1.1 christos {
1452 1.1 christos PC = cia;
1453 1.1 christos
1454 1.1 christos if (FPU_DISABLED)
1455 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1456 1.1 christos else
1457 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1458 1.1 christos }
1459 1.1 christos
1460 1.1 christos // 1111 1011 0110 0000 Sm1. Sm2. Sn.. XYZ-; fadd FSm1, FSm2, FSn
1461 1.1 christos 8.0xfb+8.0x60+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fadd
1462 1.1 christos "fadd"
1463 1.1 christos *am33_2
1464 1.1 christos {
1465 1.1 christos PC = cia;
1466 1.1 christos
1467 1.1 christos if (FPU_DISABLED)
1468 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1469 1.1 christos else
1470 1.1 christos fpu_add (SD, CPU, cia,
1471 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE);
1472 1.1 christos }
1473 1.1 christos
1474 1.1 christos // 1111 1011 1110 0000 fm1- fm2- fn.- XYZ-; fadd FDm1, FDm2, FDn
1475 1.1 christos 8.0xfb+8.0xe0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fadd
1476 1.1 christos "fadd"
1477 1.1 christos *am33_2
1478 1.1 christos {
1479 1.1 christos PC = cia;
1480 1.1 christos
1481 1.1 christos if (FPU_DISABLED)
1482 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1483 1.1 christos else
1484 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1485 1.1 christos }
1486 1.1 christos
1487 1.1 christos
1488 1.1 christos // 1111 1110 0110 00YX Sm.. Sn.. IMM32; fadd imm32, FSm, FSn
1489 1.1 christos 8.0xfe+4.6,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fadd
1490 1.1 christos "fadd"
1491 1.1 christos *am33_2
1492 1.1 christos {
1493 1.1 christos PC = cia;
1494 1.1 christos
1495 1.1 christos if (FPU_DISABLED)
1496 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1497 1.1 christos else
1498 1.1 christos {
1499 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1500 1.1 christos
1501 1.1 christos fpu_add (SD, CPU, cia,
1502 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
1503 1.1 christos }
1504 1.1 christos }
1505 1.1 christos
1506 1.1 christos // 1111 1001 0110 01YX Sm.. Sn..; fsub FSm, FSn
1507 1.1 christos 8.0xf9+4.6,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fsub
1508 1.1 christos "fsub"
1509 1.1 christos *am33_2
1510 1.1 christos {
1511 1.1 christos PC = cia;
1512 1.1 christos
1513 1.1 christos if (FPU_DISABLED)
1514 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1515 1.1 christos else
1516 1.1 christos fpu_sub (SD, CPU, cia,
1517 1.1 christos &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
1518 1.1 christos }
1519 1.1 christos
1520 1.1 christos // 1111 1001 1110 01YX fm.- fn.-; fsub FDm, FDn
1521 1.1 christos 8.0xf9+4.0xe,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fsub
1522 1.1 christos "fsub"
1523 1.1 christos *am33_2
1524 1.1 christos {
1525 1.1 christos PC = cia;
1526 1.1 christos
1527 1.1 christos if (FPU_DISABLED)
1528 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1529 1.1 christos else
1530 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1531 1.1 christos }
1532 1.1 christos
1533 1.1 christos // 1111 1011 0110 0100 Sm1. Sm2. Sn.. XYZ-; fsub FSm1, FSm2, FSn
1534 1.1 christos 8.0xfb+8.0x64+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fsub
1535 1.1 christos "fsub"
1536 1.1 christos *am33_2
1537 1.1 christos {
1538 1.1 christos PC = cia;
1539 1.1 christos
1540 1.1 christos if (FPU_DISABLED)
1541 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1542 1.1 christos else
1543 1.1 christos fpu_sub (SD, CPU, cia,
1544 1.1 christos &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE);
1545 1.1 christos }
1546 1.1 christos
1547 1.1 christos // 1111 1011 1110 0100 fm1- fm2- fn.- XYZ-; fsub FDm1, FDm2, FDn
1548 1.1 christos 8.0xfb+8.0xe4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fsub
1549 1.1 christos "fsub"
1550 1.1 christos *am33_2
1551 1.1 christos {
1552 1.1 christos PC = cia;
1553 1.1 christos
1554 1.1 christos if (FPU_DISABLED)
1555 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1556 1.1 christos else
1557 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1558 1.1 christos }
1559 1.1 christos
1560 1.1 christos
1561 1.1 christos // 1111 1110 0110 01YX Sm.. Sn.. IMM32; fsub imm32, FSm, FSn
1562 1.1 christos 8.0xfe+4.6,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fsub
1563 1.1 christos "fsub"
1564 1.1 christos *am33_2
1565 1.1 christos {
1566 1.1 christos PC = cia;
1567 1.1 christos
1568 1.1 christos if (FPU_DISABLED)
1569 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1570 1.1 christos else
1571 1.1 christos {
1572 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1573 1.1 christos
1574 1.1 christos fpu_sub (SD, CPU, cia,
1575 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
1576 1.1 christos }
1577 1.1 christos }
1578 1.1 christos
1579 1.1 christos // 1111 1001 0111 00YX Sm.. Sn..; fmul FSm, FSn
1580 1.1 christos 8.0xf9+4.7,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fmul
1581 1.1 christos "fmul"
1582 1.1 christos *am33_2
1583 1.1 christos {
1584 1.1 christos PC = cia;
1585 1.1 christos
1586 1.1 christos if (FPU_DISABLED)
1587 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1588 1.1 christos else
1589 1.1 christos fpu_mul (SD, CPU, cia,
1590 1.1 christos &XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
1591 1.1 christos }
1592 1.1 christos
1593 1.1 christos // 1111 1001 1111 00YX fm.- fn.-; fmul FDm, FDn
1594 1.1 christos 8.0xf9+4.0xf,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fmul
1595 1.1 christos "fmul"
1596 1.1 christos *am33_2
1597 1.1 christos {
1598 1.1 christos PC = cia;
1599 1.1 christos
1600 1.1 christos if (FPU_DISABLED)
1601 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1602 1.1 christos else
1603 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1604 1.1 christos }
1605 1.1 christos
1606 1.1 christos // 1111 1011 0111 0000 Sm1. Sm2. Sn.. XYZ-; fmul FSm1, FSm2, FSn
1607 1.1 christos 8.0xfb+8.0x70+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fmul
1608 1.1 christos "fmul"
1609 1.1 christos *am33_2
1610 1.1 christos {
1611 1.1 christos PC = cia;
1612 1.1 christos
1613 1.1 christos if (FPU_DISABLED)
1614 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1615 1.1 christos else
1616 1.1 christos fpu_mul (SD, CPU, cia,
1617 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE);
1618 1.1 christos }
1619 1.1 christos
1620 1.1 christos // 1111 1011 1111 0000 fm1- fm2- fn.- XYZ-; fmul FDm1, FDm2, FDn
1621 1.1 christos 8.0xfb+8.0xf0+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fmul
1622 1.1 christos "fmul"
1623 1.1 christos *am33_2
1624 1.1 christos {
1625 1.1 christos PC = cia;
1626 1.1 christos
1627 1.1 christos if (FPU_DISABLED)
1628 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1629 1.1 christos else
1630 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1631 1.1 christos }
1632 1.1 christos
1633 1.1 christos
1634 1.1 christos // 1111 1110 0111 00YX Sm.. Sn.. IMM32; fmul imm32, FSm, FSn
1635 1.1 christos 8.0xfe+4.7,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmul
1636 1.1 christos "fmul"
1637 1.1 christos *am33_2
1638 1.1 christos {
1639 1.1 christos PC = cia;
1640 1.1 christos
1641 1.1 christos if (FPU_DISABLED)
1642 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1643 1.1 christos else
1644 1.1 christos {
1645 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1646 1.1 christos
1647 1.1 christos fpu_mul (SD, CPU, cia,
1648 1.1 christos &imm, &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
1649 1.1 christos }
1650 1.1 christos }
1651 1.1 christos
1652 1.1 christos // 1111 1001 0111 01YX Sm.. Sn..; fdiv FSm, FSn
1653 1.1 christos 8.0xf9+4.7,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fdiv
1654 1.1 christos "fdiv"
1655 1.1 christos *am33_2
1656 1.1 christos {
1657 1.1 christos PC = cia;
1658 1.1 christos
1659 1.1 christos if (FPU_DISABLED)
1660 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1661 1.1 christos else
1662 1.1 christos fpu_div (SD, CPU, cia,
1663 1.1 christos &XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
1664 1.1 christos }
1665 1.1 christos
1666 1.1 christos // 1111 1001 1111 01YX fm.- fn.-; fdiv FDm, FDn
1667 1.1 christos 8.0xf9+4.0xf,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fdiv
1668 1.1 christos "fdiv"
1669 1.1 christos *am33_2
1670 1.1 christos {
1671 1.1 christos PC = cia;
1672 1.1 christos
1673 1.1 christos if (FPU_DISABLED)
1674 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1675 1.1 christos else
1676 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1677 1.1 christos }
1678 1.1 christos
1679 1.1 christos // 1111 1011 0111 0100 Sm1. Sm2. Sn.. XYZ-; fdiv FSm1, FSm2, FSn
1680 1.1 christos 8.0xfb+8.0x74+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fdiv
1681 1.1 christos "fdiv"
1682 1.1 christos *am33_2
1683 1.1 christos {
1684 1.1 christos PC = cia;
1685 1.1 christos
1686 1.1 christos if (FPU_DISABLED)
1687 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1688 1.1 christos else
1689 1.1 christos fpu_div (SD, CPU, cia,
1690 1.1 christos &XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE);
1691 1.1 christos }
1692 1.1 christos
1693 1.1 christos // 1111 1011 1111 0100 fm1- fm2- fn.- XYZ-; fdiv FDm1, FDm2, FDn
1694 1.1 christos 8.0xfb+8.0xf4+3.fm1,1.0,3.fm2,1.0+3.fn,1.0,1.X,1.Y,1.Z,1.0:D2b:::fdiv
1695 1.1 christos "fdiv"
1696 1.1 christos *am33_2
1697 1.1 christos {
1698 1.1 christos PC = cia;
1699 1.1 christos
1700 1.1 christos if (FPU_DISABLED)
1701 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1702 1.1 christos else
1703 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1704 1.1 christos }
1705 1.1 christos
1706 1.1 christos
1707 1.1 christos // 1111 1110 0111 01YX Sm.. Sn.. IMM32; fdiv imm32, FSm, FSn
1708 1.1 christos 8.0xfe+4.7,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fdiv
1709 1.1 christos "fdiv"
1710 1.1 christos *am33_2
1711 1.1 christos {
1712 1.1 christos PC = cia;
1713 1.1 christos
1714 1.1 christos if (FPU_DISABLED)
1715 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1716 1.1 christos else
1717 1.1 christos {
1718 1.6 christos uint32_t imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
1719 1.1 christos
1720 1.1 christos fpu_div (SD, CPU, cia,
1721 1.1 christos &XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
1722 1.1 christos }
1723 1.1 christos }
1724 1.1 christos
1725 1.1 christos // 1111 1011 1000 00Sn Sm1. Sm2. Sm3. XYZA; fmadd FSm1, FSm2, FSm3, FSn
1726 1.1 christos 8.0xfb+4.8,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmadd
1727 1.1 christos "fmadd"
1728 1.1 christos *am33_2
1729 1.1 christos {
1730 1.1 christos PC = cia;
1731 1.1 christos
1732 1.1 christos if (FPU_DISABLED)
1733 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1734 1.1 christos else
1735 1.1 christos fpu_fmadd (SD, CPU, cia,
1736 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
1737 1.1 christos &AS2FS (A,Sn), FP_SINGLE);
1738 1.1 christos }
1739 1.1 christos
1740 1.1 christos // 1111 1011 1000 01Sn Sm1. Sm2. Sm3. XYZA; fmsub FSm1, FSm2, FSm3, FSn
1741 1.1 christos 8.0xfb+4.8,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmsub
1742 1.1 christos "fmsub"
1743 1.1 christos *am33_2
1744 1.1 christos {
1745 1.1 christos PC = cia;
1746 1.1 christos
1747 1.1 christos if (FPU_DISABLED)
1748 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1749 1.1 christos else
1750 1.1 christos fpu_fmsub (SD, CPU, cia,
1751 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
1752 1.1 christos &AS2FS (A,Sn), FP_SINGLE);
1753 1.1 christos }
1754 1.1 christos
1755 1.1 christos // 1111 1011 1001 00Sn Sm1. Sm2. Sm3. XYZA; fnmadd FSm1, FSm2, FSm3, FSn
1756 1.1 christos 8.0xfb+4.9,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmadd
1757 1.1 christos "fnmadd"
1758 1.1 christos *am33_2
1759 1.1 christos {
1760 1.1 christos PC = cia;
1761 1.1 christos
1762 1.1 christos if (FPU_DISABLED)
1763 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1764 1.1 christos else
1765 1.1 christos fpu_fnmadd (SD, CPU, cia,
1766 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
1767 1.1 christos &AS2FS (A,Sn), FP_SINGLE);
1768 1.1 christos }
1769 1.1 christos
1770 1.1 christos // 1111 1011 1001 01Sn Sm1. Sm2. Sm3. XYZA; fnmsub FSm1, FSm2, FSm3, FSn
1771 1.1 christos 8.0xfb+4.9,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmsub
1772 1.1 christos "fnmsub"
1773 1.1 christos *am33_2
1774 1.1 christos {
1775 1.1 christos PC = cia;
1776 1.1 christos
1777 1.1 christos if (FPU_DISABLED)
1778 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1779 1.1 christos else
1780 1.1 christos fpu_fnmsub (SD, CPU, cia,
1781 1.1 christos &XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
1782 1.1 christos &AS2FS (A,Sn), FP_SINGLE);
1783 1.1 christos }
1784 1.1 christos
1785 1.1 christos // conversion:
1786 1.1 christos
1787 1.1 christos // 1111 1011 0100 0000 Sm.. ---- Sn.. X-Z-; ftoi FSm,FSn
1788 1.1 christos 8.0xfb+8.0x40+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::ftoi
1789 1.1 christos "ftoi"
1790 1.1 christos *am33_2
1791 1.1 christos {
1792 1.1 christos PC = cia;
1793 1.1 christos
1794 1.1 christos if (FPU_DISABLED)
1795 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1796 1.1 christos else
1797 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1798 1.1 christos }
1799 1.1 christos
1800 1.1 christos // 1111 1011 0100 0010 Sm.. ---- Sn.. X-Z-; itof FSm,FSn
1801 1.1 christos 8.0xfb+8.0x42+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::itof
1802 1.1 christos "itof"
1803 1.1 christos *am33_2
1804 1.1 christos {
1805 1.1 christos PC = cia;
1806 1.1 christos
1807 1.1 christos if (FPU_DISABLED)
1808 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1809 1.1 christos else
1810 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1811 1.1 christos }
1812 1.1 christos
1813 1.1 christos // 1111 1011 0101 0010 Sm.. ---- fn.- X-Z-; ftod FSm,FDn
1814 1.1 christos 8.0xfb+8.0x52+4.Sm,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2:::ftod
1815 1.1 christos "ftod"
1816 1.1 christos *am33_2
1817 1.1 christos {
1818 1.1 christos PC = cia;
1819 1.1 christos
1820 1.1 christos if (FPU_DISABLED)
1821 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1822 1.1 christos else
1823 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1824 1.1 christos }
1825 1.1 christos
1826 1.1 christos // 1111 1011 0101 0110 fm.- ---- Sn.. X-Z-; dtof FDm,FSn
1827 1.1 christos 8.0xfb+8.0x56+3.fm,1.0,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::dtof
1828 1.1 christos "dtof"
1829 1.1 christos *am33_2
1830 1.1 christos {
1831 1.1 christos PC = cia;
1832 1.1 christos
1833 1.1 christos if (FPU_DISABLED)
1834 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1835 1.1 christos else
1836 1.1 christos fpu_unimp_exception (SD, CPU, cia);
1837 1.1 christos }
1838 1.1 christos
1839 1.1 christos // branching:
1840 1.1 christos
1841 1.1 christos // 1111 1000 1101 0000 d8; fbeq (d8,PC) (d8 is sign-extended)
1842 1.1 christos 8.0xf8+8.0xd0+8.D8:D1:::fbeq
1843 1.1 christos "fbeq"
1844 1.1 christos *am33_2
1845 1.1 christos {
1846 1.1 christos PC = cia;
1847 1.1 christos
1848 1.1 christos if (FPU_DISABLED)
1849 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1850 1.1 christos else if ((FPCR & FCC_E))
1851 1.1 christos {
1852 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1853 1.1 christos nia = PC;
1854 1.1 christos }
1855 1.1 christos }
1856 1.1 christos
1857 1.1 christos // 1111 1000 1101 0001 d8; fbne (d8,PC) (d8 is sign-extended)
1858 1.1 christos 8.0xf8+8.0xd1+8.D8:D1:::fbne
1859 1.1 christos "fbne"
1860 1.1 christos *am33_2
1861 1.1 christos {
1862 1.1 christos PC = cia;
1863 1.1 christos
1864 1.1 christos if (FPU_DISABLED)
1865 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1866 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_G)))
1867 1.1 christos {
1868 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1869 1.1 christos nia = PC;
1870 1.1 christos }
1871 1.1 christos }
1872 1.1 christos
1873 1.1 christos // 1111 1000 1101 0010 d8; fbgt (d8,PC) (d8 is sign-extended)
1874 1.1 christos 8.0xf8+8.0xd2+8.D8:D1:::fbgt
1875 1.1 christos "fbgt"
1876 1.1 christos *am33_2
1877 1.1 christos {
1878 1.1 christos PC = cia;
1879 1.1 christos
1880 1.1 christos if (FPU_DISABLED)
1881 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1882 1.1 christos else if ((FPCR & FCC_G))
1883 1.1 christos {
1884 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1885 1.1 christos nia = PC;
1886 1.1 christos }
1887 1.1 christos }
1888 1.1 christos
1889 1.1 christos // 1111 1000 1101 0011 d8; fbge (d8,PC) (d8 is sign-extended)
1890 1.1 christos 8.0xf8+8.0xd3+8.D8:D1:::fbge
1891 1.1 christos "fbge"
1892 1.1 christos *am33_2
1893 1.1 christos {
1894 1.1 christos PC = cia;
1895 1.1 christos
1896 1.1 christos if (FPU_DISABLED)
1897 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1898 1.1 christos else if ((FPCR & (FCC_G | FCC_E)))
1899 1.1 christos {
1900 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1901 1.1 christos nia = PC;
1902 1.1 christos }
1903 1.1 christos }
1904 1.1 christos
1905 1.1 christos // 1111 1000 1101 0100 d8; fblt (d8,PC) (d8 is sign-extended)
1906 1.1 christos 8.0xf8+8.0xd4+8.D8:D1:::fblt
1907 1.1 christos "fblt"
1908 1.1 christos *am33_2
1909 1.1 christos {
1910 1.1 christos PC = cia;
1911 1.1 christos
1912 1.1 christos if (FPU_DISABLED)
1913 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1914 1.1 christos else if ((FPCR & FCC_L))
1915 1.1 christos {
1916 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1917 1.1 christos nia = PC;
1918 1.1 christos }
1919 1.1 christos }
1920 1.1 christos
1921 1.1 christos // 1111 1000 1101 0101 d8; fble (d8,PC) (d8 is sign-extended)
1922 1.1 christos 8.0xf8+8.0xd5+8.D8:D1:::fble
1923 1.1 christos "fble"
1924 1.1 christos *am33_2
1925 1.1 christos {
1926 1.1 christos PC = cia;
1927 1.1 christos
1928 1.1 christos if (FPU_DISABLED)
1929 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1930 1.1 christos else if ((FPCR & (FCC_L | FCC_E)))
1931 1.1 christos {
1932 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1933 1.1 christos nia = PC;
1934 1.1 christos }
1935 1.1 christos }
1936 1.1 christos
1937 1.1 christos // 1111 1000 1101 0110 d8; fbuo (d8,PC) (d8 is sign-extended)
1938 1.1 christos 8.0xf8+8.0xd6+8.D8:D1:::fbuo
1939 1.1 christos "fbuo"
1940 1.1 christos *am33_2
1941 1.1 christos {
1942 1.1 christos PC = cia;
1943 1.1 christos
1944 1.1 christos if (FPU_DISABLED)
1945 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1946 1.1 christos else if ((FPCR & FCC_U))
1947 1.1 christos {
1948 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1949 1.1 christos nia = PC;
1950 1.1 christos }
1951 1.1 christos }
1952 1.1 christos
1953 1.1 christos // 1111 1000 1101 0111 d8; fblg (d8,PC) (d8 is sign-extended)
1954 1.1 christos 8.0xf8+8.0xd7+8.D8:D1:::fblg
1955 1.1 christos "fblg"
1956 1.1 christos *am33_2
1957 1.1 christos {
1958 1.1 christos PC = cia;
1959 1.1 christos
1960 1.1 christos if (FPU_DISABLED)
1961 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1962 1.1 christos else if ((FPCR & (FCC_L | FCC_G)))
1963 1.1 christos {
1964 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1965 1.1 christos nia = PC;
1966 1.1 christos }
1967 1.1 christos }
1968 1.1 christos // 1111 1000 1101 1000 d8; fbleg (d8,PC) (d8 is sign-extended)
1969 1.1 christos 8.0xf8+8.0xd8+8.D8:D1:::fbleg
1970 1.1 christos "fbleg"
1971 1.1 christos *am33_2
1972 1.1 christos {
1973 1.1 christos PC = cia;
1974 1.1 christos
1975 1.1 christos if (FPU_DISABLED)
1976 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1977 1.1 christos else if ((FPCR & (FCC_L | FCC_E | FCC_G)))
1978 1.1 christos {
1979 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1980 1.1 christos nia = PC;
1981 1.1 christos }
1982 1.1 christos }
1983 1.1 christos
1984 1.1 christos // 1111 1000 1101 1001 d8; fbug (d8,PC) (d8 is sign-extended)
1985 1.1 christos 8.0xf8+8.0xd9+8.D8:D1:::fbug
1986 1.1 christos "fbug"
1987 1.1 christos *am33_2
1988 1.1 christos {
1989 1.1 christos PC = cia;
1990 1.1 christos
1991 1.1 christos if (FPU_DISABLED)
1992 1.1 christos fpu_disabled_exception (SD, CPU, cia);
1993 1.1 christos else if ((FPCR & (FCC_U | FCC_G)))
1994 1.1 christos {
1995 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
1996 1.1 christos nia = PC;
1997 1.1 christos }
1998 1.1 christos }
1999 1.1 christos
2000 1.1 christos // 1111 1000 1101 1010 d8; fbuge (d8,PC) (d8 is sign-extended)
2001 1.1 christos 8.0xf8+8.0xda+8.D8:D1:::fbuge
2002 1.1 christos "fbuge"
2003 1.1 christos *am33_2
2004 1.1 christos {
2005 1.1 christos PC = cia;
2006 1.1 christos
2007 1.1 christos if (FPU_DISABLED)
2008 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2009 1.1 christos else if ((FPCR & (FCC_U | FCC_G | FCC_E)))
2010 1.1 christos {
2011 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
2012 1.1 christos nia = PC;
2013 1.1 christos }
2014 1.1 christos }
2015 1.1 christos
2016 1.1 christos // 1111 1000 1101 1011 d8; fbul (d8,PC) (d8 is sign-extended)
2017 1.1 christos 8.0xf8+8.0xdb+8.D8:D1:::fbul
2018 1.1 christos "fbul"
2019 1.1 christos *am33_2
2020 1.1 christos {
2021 1.1 christos PC = cia;
2022 1.1 christos
2023 1.1 christos if (FPU_DISABLED)
2024 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2025 1.1 christos else if ((FPCR & (FCC_U | FCC_L)))
2026 1.1 christos {
2027 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
2028 1.1 christos nia = PC;
2029 1.1 christos }
2030 1.1 christos }
2031 1.1 christos
2032 1.1 christos // 1111 1000 1101 1100 d8; fbule (d8,PC) (d8 is sign-extended)
2033 1.1 christos 8.0xf8+8.0xdc+8.D8:D1:::fbule
2034 1.1 christos "fbule"
2035 1.1 christos *am33_2
2036 1.1 christos {
2037 1.1 christos PC = cia;
2038 1.1 christos
2039 1.1 christos if (FPU_DISABLED)
2040 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2041 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_E)))
2042 1.1 christos {
2043 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
2044 1.1 christos nia = PC;
2045 1.1 christos }
2046 1.1 christos }
2047 1.1 christos
2048 1.1 christos // 1111 1000 1101 1101 d8; fbue (d8,PC) (d8 is sign-extended)
2049 1.1 christos 8.0xf8+8.0xdd+8.D8:D1:::fbue
2050 1.1 christos "fbue"
2051 1.1 christos *am33_2
2052 1.1 christos {
2053 1.1 christos PC = cia;
2054 1.1 christos
2055 1.1 christos if (FPU_DISABLED)
2056 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2057 1.1 christos else if ((FPCR & (FCC_U | FCC_E)))
2058 1.1 christos {
2059 1.1 christos State.regs[REG_PC] += EXTEND8 (D8);
2060 1.1 christos nia = PC;
2061 1.1 christos }
2062 1.1 christos }
2063 1.1 christos
2064 1.1 christos // 1111 0000 1101 0000; fleq
2065 1.1 christos 8.0xf0+8.0xd0:D0:::fleq
2066 1.1 christos "fleq"
2067 1.1 christos *am33_2
2068 1.1 christos {
2069 1.1 christos PC = cia;
2070 1.1 christos
2071 1.1 christos if (FPU_DISABLED)
2072 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2073 1.1 christos else if ((FPCR & FCC_E))
2074 1.1 christos {
2075 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2076 1.1 christos nia = PC;
2077 1.1 christos }
2078 1.1 christos }
2079 1.1 christos
2080 1.1 christos // 1111 0000 1101 0001; flne
2081 1.1 christos 8.0xf0+8.0xd1:D0:::flne
2082 1.1 christos "flne"
2083 1.1 christos *am33_2
2084 1.1 christos {
2085 1.1 christos PC = cia;
2086 1.1 christos
2087 1.1 christos if (FPU_DISABLED)
2088 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2089 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_G)))
2090 1.1 christos {
2091 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2092 1.1 christos nia = PC;
2093 1.1 christos }
2094 1.1 christos }
2095 1.1 christos
2096 1.1 christos // 1111 0000 1101 0010; flgt
2097 1.1 christos 8.0xf0+8.0xd2:D0:::flgt
2098 1.1 christos "flgt"
2099 1.1 christos *am33_2
2100 1.1 christos {
2101 1.1 christos PC = cia;
2102 1.1 christos
2103 1.1 christos if (FPU_DISABLED)
2104 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2105 1.1 christos else if ((FPCR & FCC_G))
2106 1.1 christos {
2107 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2108 1.1 christos nia = PC;
2109 1.1 christos }
2110 1.1 christos }
2111 1.1 christos
2112 1.1 christos // 1111 0000 1101 0011; flge
2113 1.1 christos 8.0xf0+8.0xd3:D0:::flge
2114 1.1 christos "flge"
2115 1.1 christos *am33_2
2116 1.1 christos {
2117 1.1 christos PC = cia;
2118 1.1 christos
2119 1.1 christos if (FPU_DISABLED)
2120 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2121 1.1 christos else if ((FPCR & (FCC_G | FCC_E)))
2122 1.1 christos {
2123 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2124 1.1 christos nia = PC;
2125 1.1 christos }
2126 1.1 christos }
2127 1.1 christos
2128 1.1 christos // 1111 0000 1101 0100; fllt
2129 1.1 christos 8.0xf0+8.0xd4:D0:::fllt
2130 1.1 christos "fllt"
2131 1.1 christos *am33_2
2132 1.1 christos {
2133 1.1 christos PC = cia;
2134 1.1 christos
2135 1.1 christos if (FPU_DISABLED)
2136 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2137 1.1 christos else if ((FPCR & FCC_L))
2138 1.1 christos {
2139 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2140 1.1 christos nia = PC;
2141 1.1 christos }
2142 1.1 christos }
2143 1.1 christos
2144 1.1 christos // 1111 0000 1101 0101; flle
2145 1.1 christos 8.0xf0+8.0xd5:D0:::flle
2146 1.1 christos "flle"
2147 1.1 christos *am33_2
2148 1.1 christos {
2149 1.1 christos PC = cia;
2150 1.1 christos
2151 1.1 christos if (FPU_DISABLED)
2152 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2153 1.1 christos else if ((FPCR & (FCC_L | FCC_E)))
2154 1.1 christos {
2155 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2156 1.1 christos nia = PC;
2157 1.1 christos }
2158 1.1 christos }
2159 1.1 christos
2160 1.1 christos // 1111 0000 1101 0110; fluo
2161 1.1 christos 8.0xf0+8.0xd6:D0:::fluo
2162 1.1 christos "fluo"
2163 1.1 christos *am33_2
2164 1.1 christos {
2165 1.1 christos PC = cia;
2166 1.1 christos
2167 1.1 christos if (FPU_DISABLED)
2168 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2169 1.1 christos else if ((FPCR & FCC_U))
2170 1.1 christos {
2171 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2172 1.1 christos nia = PC;
2173 1.1 christos }
2174 1.1 christos }
2175 1.1 christos
2176 1.1 christos // 1111 0000 1101 0111; fllg
2177 1.1 christos 8.0xf0+8.0xd7:D0:::fllg
2178 1.1 christos "fllg"
2179 1.1 christos *am33_2
2180 1.1 christos {
2181 1.1 christos PC = cia;
2182 1.1 christos
2183 1.1 christos if (FPU_DISABLED)
2184 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2185 1.1 christos else if ((FPCR & (FCC_L | FCC_G)))
2186 1.1 christos {
2187 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2188 1.1 christos nia = PC;
2189 1.1 christos }
2190 1.1 christos }
2191 1.1 christos // 1111 0000 1101 1000; flleg
2192 1.1 christos 8.0xf0+8.0xd8:D0:::flleg
2193 1.1 christos "flleg"
2194 1.1 christos *am33_2
2195 1.1 christos {
2196 1.1 christos PC = cia;
2197 1.1 christos
2198 1.1 christos if (FPU_DISABLED)
2199 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2200 1.1 christos else if ((FPCR & (FCC_L | FCC_E | FCC_G)))
2201 1.1 christos {
2202 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2203 1.1 christos nia = PC;
2204 1.1 christos }
2205 1.1 christos }
2206 1.1 christos
2207 1.1 christos // 1111 0000 1101 1001; flug
2208 1.1 christos 8.0xf0+8.0xd9:D0:::flug
2209 1.1 christos "flug"
2210 1.1 christos *am33_2
2211 1.1 christos {
2212 1.1 christos PC = cia;
2213 1.1 christos
2214 1.1 christos if (FPU_DISABLED)
2215 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2216 1.1 christos else if ((FPCR & (FCC_U | FCC_G)))
2217 1.1 christos {
2218 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2219 1.1 christos nia = PC;
2220 1.1 christos }
2221 1.1 christos }
2222 1.1 christos
2223 1.1 christos // 1111 0000 1101 1010; fluge
2224 1.1 christos 8.0xf0+8.0xda:D0:::fluge
2225 1.1 christos "fluge"
2226 1.1 christos *am33_2
2227 1.1 christos {
2228 1.1 christos PC = cia;
2229 1.1 christos
2230 1.1 christos if (FPU_DISABLED)
2231 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2232 1.1 christos else if ((FPCR & (FCC_U | FCC_G | FCC_E)))
2233 1.1 christos {
2234 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2235 1.1 christos nia = PC;
2236 1.1 christos }
2237 1.1 christos }
2238 1.1 christos
2239 1.1 christos // 1111 0000 1101 1011; flul
2240 1.1 christos 8.0xf0+8.0xdb:D0:::flul
2241 1.1 christos "flul"
2242 1.1 christos *am33_2
2243 1.1 christos {
2244 1.1 christos PC = cia;
2245 1.1 christos
2246 1.1 christos if (FPU_DISABLED)
2247 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2248 1.1 christos else if ((FPCR & (FCC_U | FCC_L)))
2249 1.1 christos {
2250 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2251 1.1 christos nia = PC;
2252 1.1 christos }
2253 1.1 christos }
2254 1.1 christos
2255 1.1 christos // 1111 0000 1101 1100; flule
2256 1.1 christos 8.0xf0+8.0xdc:D0:::flule
2257 1.1 christos "flule"
2258 1.1 christos *am33_2
2259 1.1 christos {
2260 1.1 christos PC = cia;
2261 1.1 christos
2262 1.1 christos if (FPU_DISABLED)
2263 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2264 1.1 christos else if ((FPCR & (FCC_U | FCC_L | FCC_E)))
2265 1.1 christos {
2266 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2267 1.1 christos nia = PC;
2268 1.1 christos }
2269 1.1 christos }
2270 1.1 christos
2271 1.1 christos // 1111 0000 1101 1101; flue
2272 1.1 christos 8.0xf0+8.0xdd:D0:::flue
2273 1.1 christos "flue"
2274 1.1 christos *am33_2
2275 1.1 christos {
2276 1.1 christos PC = cia;
2277 1.1 christos
2278 1.1 christos if (FPU_DISABLED)
2279 1.1 christos fpu_disabled_exception (SD, CPU, cia);
2280 1.1 christos else if ((FPCR & (FCC_U | FCC_E)))
2281 1.1 christos {
2282 1.1 christos State.regs[REG_PC] = State.regs[REG_LAR] - 4;
2283 1.1 christos nia = PC;
2284 1.1 christos }
2285 1.1 christos }
2286