OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [sim/] [mn10300/] [am33-2.igen] - Blame information for rev 868

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.