2286 lines
44 KiB
Plaintext
2286 lines
44 KiB
Plaintext
// data cache pre-fetch:
|
|
|
|
// 1111 1001 1010 0110 Rm.. 0000; dcpf (Rm)
|
|
8.0xf9+8.0xa6+4.RN2,4.0000:D1a:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
int srcreg;
|
|
|
|
PC = cia;
|
|
|
|
srcreg = translate_rreg (SD_, RN2);
|
|
load_word (State.regs[srcreg]);
|
|
}
|
|
|
|
// 1111 1001 1010 0111 0000 0000; dcpf (sp)
|
|
8.0xf9+8.0xa7+8.0x00:D1b:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
load_word (SP);
|
|
}
|
|
|
|
// 1111 1011 1010 0110 Ri.. Rm.. 0000 0000; dcpf (Ri,Rm)
|
|
8.0xfb+8.0xa6+4.RN2,4.RN0+8.0x00:D2a:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
int srci, srcm;
|
|
|
|
PC = cia;
|
|
|
|
srci = translate_rreg (SD_, RN2);
|
|
srcm = translate_rreg (SD_, RN0);
|
|
|
|
load_word (State.regs[srci] + State.regs[srcm]);
|
|
}
|
|
|
|
// 1111 1011 1010 0111 Rm.. 0000 IMM8; dcpf (d8,Rm)
|
|
8.0xfb+8.0xa7+4.RN2,4.0000+8.IMM8:D2b:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
int srcreg;
|
|
|
|
PC = cia;
|
|
|
|
srcreg = translate_rreg (SD_, RN2);
|
|
|
|
load_word (State.regs[srcreg] + EXTEND8 (IMM8));
|
|
}
|
|
|
|
// 1111 1101 1010 0111 Rm.. 0000 IMM24; dcpf (d24,Rm)
|
|
8.0xfd+8.0xa7+4.RN2,4.0000+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
int srcreg;
|
|
|
|
PC = cia;
|
|
|
|
srcreg = translate_rreg (SD_, RN2);
|
|
|
|
load_word (State.regs[srcreg] + EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)));
|
|
}
|
|
|
|
// 1111 1110 0100 0110 Rm.. 0000 IMM32; dcpf (d32,Rm)
|
|
8.0xfe+8.0x46+4.RN2,4.0000+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::dcpf
|
|
"dcpf"
|
|
*am33_2
|
|
{
|
|
int srcreg;
|
|
|
|
PC = cia;
|
|
|
|
srcreg = translate_rreg (SD_, RN2);
|
|
|
|
load_word (State.regs[srcreg]
|
|
+ FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D));
|
|
}
|
|
|
|
// bit operations with imm8,(abs16) addressing mode:
|
|
|
|
// 1111 1110 1000 0010 ABS16 IMM8; btst imm8,(abs16)
|
|
8.0xfe+8.0x82+8.IMM16A+8.IMM16B+8.IMM8:D3:::btst
|
|
"btst"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
genericBtst (IMM8, FETCH16 (IMM16A, IMM16B));
|
|
}
|
|
|
|
// 1111 1110 1000 0000 ABS16 IMM8; bset imm8,(abs16)
|
|
8.0xfe+8.0x80+8.IMM16A+8.IMM16B+8.IMM8:D3:::bset
|
|
"bset"
|
|
*am33_2
|
|
{
|
|
unsigned32 temp;
|
|
int z;
|
|
|
|
PC = cia;
|
|
temp = load_byte (FETCH16 (IMM16A, IMM16B));
|
|
z = (temp & IMM8) == 0;
|
|
temp |= IMM8;
|
|
store_byte (FETCH16 (IMM16A, IMM16B), temp);
|
|
PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
|
|
PSW |= (z ? PSW_Z : 0);
|
|
}
|
|
|
|
// 1111 1110 1000 0001 ABS16 IMM8; bclr imm8,(abs16)
|
|
8.0xfe+8.0x81+8.IMM16A+8.IMM16B+8.IMM8:D3:::bclr
|
|
"bclr"
|
|
*am33_2
|
|
{
|
|
unsigned32 temp;
|
|
int z;
|
|
|
|
PC = cia;
|
|
temp = load_byte (FETCH16 (IMM16A, IMM16B));
|
|
z = (temp & IMM8) == 0;
|
|
temp = temp & ~(IMM8);
|
|
store_byte (FETCH16 (IMM16A, IMM16B), temp);
|
|
PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
|
|
PSW |= (z ? PSW_Z : 0);
|
|
}
|
|
|
|
// single precision fmov:
|
|
|
|
// 1111 1001 0010 000X Rm.. Sn..; fmov (Rm),FSn
|
|
8.0xf9+4.2,3.0,1.X+4.Rm,4.Sn:D1a:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X,Sn) = load_word (State.regs[reg]);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0010 001X Rm.. Sn..; fmov (Rm+),FSn
|
|
8.0xf9+4.2,3.1,1.X+4.Rm,4.Sn:D1b:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X,Sn) = load_word (State.regs[reg]);
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0010 010X ---- Sn..; fmov (SP),FSn
|
|
8.0xf9+4.2,3.2,1.X+4.0,4.Sn:D1c:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
XS2FS (X,Sn) = load_word (State.regs[reg]);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0010 011X Rm.. Sn..; fmov Rm,FSn
|
|
8.0xf9+4.2,3.3,1.X+4.Rm,4.Sn:D1d:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X,Sn) = State.regs[reg];
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0011 00Y0 Sm.. Rn..; fmov FSm,(Rn)
|
|
8.0xf9+4.3,2.0,1.Y,1.0+4.Sm,4.Rn:D1e:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg], XS2FS (Y,Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0011 00Y1 Sm.. Rn..; fmov FSm,(Rn+)
|
|
8.0xf9+4.3,2.0,1.Y,1.1+4.Sm,4.Rn:D1f:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg], XS2FS (Y,Sm));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0011 01Y0 Sm.. ----; fmov FSm,(SP)
|
|
8.0xf9+4.3,2.1,1.Y,1.0+4.Sm,4.0:D1g:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_word (State.regs[reg], XS2FS (Y,Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0011 01Y1 Sm.. Rn..; fmov FSm,Rn
|
|
8.0xf9+4.3,2.1,1.Y,1.1+4.Sm,4.Rn:D1h:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
State.regs[reg] = XS2FS (Y,Sm);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0100 00YX Sm.. Sn..; fmov FSm,FSn
|
|
8.0xf9+4.4,2.0,1.Y,1.X+4.Sm,4.Sn:D1i:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
XS2FS (X,Sn) = XS2FS (Y,Sm);
|
|
}
|
|
|
|
// 1111 1011 0010 000X Rm.. Sn.. d8; fmov (d8,Rm),FSn
|
|
8.0xfb+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM8:D2a:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0010 001X Rm.. Sn.. d8; fmov (Rm+,imm8),FSn
|
|
8.0xfb+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM8:D2b:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg] + EXTEND8 (IMM8));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0010 010X ---- Sn.. d8; fmov (d8,SP),FSn
|
|
8.0xfb+4.2,3.2,1.X+4.0,4.Sn+8.IMM8:D2c:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
XS2FS (X, Sn) = load_word (State.regs[reg] + IMM8);
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0010 0111 Ri.. Rm.. Sn.. --Z-; fmov (Ri,Rm),FSn
|
|
8.0xfb+8.0x27+4.Ri,4.Rm+4.Sn,2.0,1.Z,1.0:D2d:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int ri = translate_rreg (SD_, Ri);
|
|
int rm = translate_rreg (SD_, Rm);
|
|
XS2FS (Z, Sn) = load_word (State.regs[ri] + State.regs[rm]);
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0011 00Y0 Sm.. Rn.. d8; fmov FSm,(d8,Rn)
|
|
8.0xfb+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM8:D2e:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0011 00Y1 Sm.. Rn.. d8; fmov FSm,(Rn+,d8)
|
|
8.0xfb+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM8:D2f:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg] + EXTEND8 (IMM8), XS2FS (Y, Sm));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0011 01Y0 Sm.. ---- d8; fmov FSm,(d8,SP)
|
|
8.0xfb+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM8:D2g:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_word (State.regs[reg] + IMM8, XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0011 0111 Ri.. Rm.. Sm.. --Z-; fmov FSm,(Ri,Rm)
|
|
8.0xfb+8.0x37+4.Ri,4.Rm+4.Sm,2.0,1.Z,1.0:D2h:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int ri = translate_rreg (SD_, Ri);
|
|
int rm = translate_rreg (SD_, Rm);
|
|
store_word (State.regs[ri] + State.regs[rm], XS2FS (Z, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0010 000X Rm.. Sn.. d24; fmov (d24,Rm),FSn
|
|
8.0xfd+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4a:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0010 001X Rm.. Sn.. d24; fmov (Rm+,imm24),FSn
|
|
8.0xfd+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4b:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0010 010X ---- Sn.. d24; fmov (d24,SP),FSn
|
|
8.0xfd+4.2,3.2,1.X+4.0,4.Sn+8.IMM24A+8.IMM24B+8.IMM24C:D4c:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
XS2FS (X, Sn) = load_word (State.regs[reg] + FETCH24 (IMM24A,
|
|
IMM24B, IMM24C));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0011 00Y0 Sm.. Rn.. d24; fmov FSm,(d24,Rn)
|
|
8.0xfd+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4e:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)), XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0011 00Y1 Sm.. Rn.. d24; fmov FSm,(Rn+,d24)
|
|
8.0xfd+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4f:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)), XS2FS (Y, Sm));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1101 0011 01Y0 Sm.. ---- d24; fmov FSm,(d24,SP)
|
|
8.0xfd+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4g:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_word (State.regs[reg]
|
|
+ FETCH24 (IMM24A,
|
|
IMM24B, IMM24C), XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0010 000X Rm.. Sn.. d32; fmov (d32,Rm),FSn
|
|
8.0xfe+4.2,3.0,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5a:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0010 001X Rm.. Sn.. d32; fmov (Rm+,imm32),FSn
|
|
8.0xfe+4.2,3.1,1.X+4.Rm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5b:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
XS2FS (X, Sn) = load_word (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0010 010X ---- Sn.. d32; fmov (d32,SP),FSn
|
|
8.0xfe+4.2,3.2,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5c:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
XS2FS (X, Sn) = load_word (State.regs[reg]
|
|
+ FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0010 011X ---- Sn.. d32; fmov imm32,FSn
|
|
8.0xfe+4.2,3.3,1.X+4.0,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5d:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
XS2FS (X, Sn) = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
}
|
|
|
|
// 1111 1110 0011 00Y0 Sm.. Rn.. d32; fmov FSm,(d32,Rn)
|
|
8.0xfe+4.3,2.0,1.Y,1.0+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5e:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)), XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0011 00Y1 Sm.. Rn.. d32; fmov FSm,(Rn+,d32)
|
|
8.0xfe+4.3,2.0,1.Y,1.1+4.Sm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5f:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_word (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)), XS2FS (Y, Sm));
|
|
State.regs[reg] += 4;
|
|
}
|
|
}
|
|
|
|
// 1111 1110 0011 01Y0 Sm.. ---- d32; fmov FSm,(d32,SP)
|
|
8.0xfe+4.3,2.1,1.Y,1.0+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5g:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_word (State.regs[reg]
|
|
+ FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D), XS2FS (Y, Sm));
|
|
}
|
|
}
|
|
|
|
// double precision fmov:
|
|
|
|
// 1111 1001 1010 000X Rm.. fn.-; fmov (Rm),FDn
|
|
8.0xf9+4.0xa,3.0,1.X+4.Rm,3.fn,1.0:D1j:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X,fn) = load_dword (State.regs[reg]);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1010 001X Rm.. fn.-; fmov (Rm+),FDn
|
|
8.0xf9+4.0xa,3.1,1.X+4.Rm,3.fn,1.0:D1k:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X,fn) = load_dword (State.regs[reg]);
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1010 010X ---- fn.-; fmov (SP),FDn
|
|
8.0xf9+4.0xa,3.2,1.X+4.0,3.fn,1.0:D1l:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
Xf2FD (X,fn) = load_dword (State.regs[reg]);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1011 00Y0 fm.- Rn..; fmov FDm,(Rn)
|
|
8.0xf9+4.0xb,2.0,1.Y,1.0+3.fm,1.0,4.Rn:D1m:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg], Xf2FD (Y,fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1011 00Y1 fm.- Rn..; fmov FDm,(Rn+)
|
|
8.0xf9+4.0xb,2.0,1.Y,1.1+3.fm,1.0,4.Rn:D1n:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg], Xf2FD (Y,fm));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1011 01Y0 fm.- ----; fmov FDm,(SP)
|
|
8.0xf9+4.0xb,2.1,1.Y,1.0+3.fm,1.0,4.0:D1o:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_dword (State.regs[reg], Xf2FD (Y,fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1100 00YX fm.- fn.-; fmov FDm,FDn
|
|
8.0xf9+4.0xc,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1p:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0100 0111 Ri.. Rm.. fn.- --Z-; fmov (Ri,Rm),FDn
|
|
8.0xfb+8.0x47+4.Ri,4.Rm+3.fn,1.0,2.0,1.Z,1.0:D2i:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int ri = translate_rreg (SD_, Ri);
|
|
int rm = translate_rreg (SD_, Rm);
|
|
Xf2FD (Z,fn) = load_dword (State.regs[ri] + State.regs[rm]);
|
|
}
|
|
}
|
|
|
|
// 1111 1011 0101 0111 Ri.. Rn.. fm.- --Z-; fmov FDm,(Ri,Rn)
|
|
8.0xfb+8.0x57+4.Ri,4.Rn+3.fm,1.0,2.0,1.Z,1.0:D2j:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int ri = translate_rreg (SD_, Ri);
|
|
int rn = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[ri] + State.regs[rn], Xf2FD (Z,fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1010 000X Rm.. fn.- d8; fmov (d8,Rm),FDn
|
|
8.0xfb+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM8:D2k:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1010 001X Rm.. fn.- d8; fmov (Rm+,imm8),FDn
|
|
8.0xfb+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM8:D2l:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg] + EXTEND8 (IMM8));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1010 010X ---- fn.- d8; fmov (d8,SP),FDn
|
|
8.0xfb+4.0xa,3.2,1.X+4.0,4.fn+8.IMM8:D2m:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg] + IMM8);
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1011 00Y0 fm.- Rn.. d8; fmov FDm,(d8,Rn)
|
|
8.0xfb+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM8:D2n:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1011 00Y1 fm.- Rn.. d8; fmov FDm,(Rn+,d8)
|
|
8.0xfb+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM8:D2o:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg] + EXTEND8 (IMM8), Xf2FD (Y, fm));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1011 01Y0 fm.- ---- d8; fmov FDm,(d8,SP)
|
|
8.0xfb+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM8:D2p:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_dword (State.regs[reg] + IMM8, Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1010 000X Rm.. fn.- d24; fmov (d24,Rm),FDn
|
|
8.0xfd+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4k:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1010 001X Rm.. fn.- d24; fmov (Rm+,imm24),FDn
|
|
8.0xfd+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4l:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1010 010X ---- fn.- d24; fmov (d24,SP),FDn
|
|
8.0xfd+4.0xa,3.2,1.X+4.0,4.fn+8.IMM24A+8.IMM24B+8.IMM24C:D4m:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ FETCH24 (IMM24A,
|
|
IMM24B, IMM24C));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1011 00Y0 fm.- Rn.. d24; fmov FDm,(d24,Rn)
|
|
8.0xfd+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4n:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)), Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1011 00Y1 fm.- Rn.. d24; fmov FDm,(Rn+,d24)
|
|
8.0xfd+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM24A+8.IMM24B+8.IMM24C:D4o:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg]
|
|
+ EXTEND24 (FETCH24 (IMM24A,
|
|
IMM24B, IMM24C)), Xf2FD (Y, fm));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1011 01Y0 fm.- ---- d24; fmov FDm,(d24,SP)
|
|
8.0xfd+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM24A+8.IMM24B+8.IMM24C:D4p:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_dword (State.regs[reg] + FETCH24 (IMM24A,
|
|
IMM24B, IMM24C), Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1010 000X Rm.. fn.- d32; fmov (d32,Rm),FDn
|
|
8.0xfe+4.0xa,3.0,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5k:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1010 001X Rm.. fn.- d32; fmov (Rm+,imm32),FDn
|
|
8.0xfe+4.0xa,3.1,1.X+4.Rm,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5l:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1010 010X ---- fn.- d32; fmov (d32,SP),FDn
|
|
8.0xfe+4.0xa,3.2,1.X+4.0,4.fn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5m:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
Xf2FD (X, fn) = load_dword (State.regs[reg]
|
|
+ FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1011 00Y0 fm.- Rn.. d32; fmov FDm,(d32,Rn)
|
|
8.0xfe+4.0xb,2.0,1.Y,1.0+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5n:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)), Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1011 00Y1 fm.- Rn.. d32; fmov FDm,(Rn+,d32)
|
|
8.0xfe+4.0xb,2.0,1.Y,1.1+4.fm,4.Rn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5o:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
store_dword (State.regs[reg]
|
|
+ EXTEND32 (FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D)), Xf2FD (Y, fm));
|
|
State.regs[reg] += 8;
|
|
}
|
|
}
|
|
|
|
// 1111 1110 1011 01Y0 fm.- ---- d32; fmov FDm,(d32,SP)
|
|
8.0xfe+4.0xb,2.1,1.Y,1.0+4.fm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5p:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = REG_SP;
|
|
store_dword (State.regs[reg]
|
|
+ FETCH32 (IMM32A, IMM32B,
|
|
IMM32C, IMM32D), Xf2FD (Y, fm));
|
|
}
|
|
}
|
|
|
|
// FPCR fmov:
|
|
|
|
// 1111 1001 1011 0101 Rm.. ----; fmov Rm,FPCR
|
|
8.0xf9+8.0xb5+4.Rm,4.0:D1q:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rm);
|
|
unsigned32 val = State.regs[reg];
|
|
FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK))
|
|
| ((FPCR & ~val) & EF_MASK);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1011 0111 ---- Rn..; fmov FPCR,Rn
|
|
8.0xf9+8.0xb7+4.0,4.Rn:D1r:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
int reg = translate_rreg (SD_, Rn);
|
|
State.regs[reg] = FPCR & FPCR_MASK;
|
|
}
|
|
}
|
|
|
|
// 1111 1101 1011 0101 imm32; fmov imm32,FPCR
|
|
8.0xfd+8.0xb5+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmov
|
|
"fmov"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
unsigned32 val = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
FPCR = (val & (EC_MASK | EE_MASK | FCC_MASK))
|
|
| ((FPCR & ~val) & EF_MASK);
|
|
}
|
|
}
|
|
|
|
// fabs:
|
|
|
|
// 1111 1001 0100 010X ---- Sn..; fabs FSn
|
|
8.0xf9+4.4,3.2,1.X+4.0,4.Sn:D1a:::fabs
|
|
"fabs"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
sim_fpu in, out;
|
|
|
|
FS2FPU (XS2FS (X,Sn), in);
|
|
sim_fpu_abs (&out, &in);
|
|
FPU2FS (out, XS2FS (X,Sn));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1100 010X ---- Sn..; fabs FDn
|
|
8.0xf9+4.0xc,3.2,1.X+4.0,3.fn,1.0:D1b:::fabs
|
|
"fabs"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0100 0100 Sm.. ---- Sn.. X-Z-; fabs FSm,FSn
|
|
8.0xfb+8.0x44+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fabs
|
|
"fabs"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
sim_fpu in, out;
|
|
|
|
FS2FPU (XS2FS (X,Sm), in);
|
|
sim_fpu_abs (&out, &in);
|
|
FPU2FS (out, XS2FS (Z,Sn));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1100 0100 fm.- ---- fn.- X-Z-; fabs FDm,FDn
|
|
8.0xfb+8.0xc4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fabs
|
|
"fabs"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1001 0100 011X ---- Sn..; fneg FSn
|
|
8.0xf9+4.4,3.3,1.X+4.0,4.Sn:D1a:::fneg
|
|
"fneg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
sim_fpu in, out;
|
|
|
|
FS2FPU (XS2FS (X,Sn), in);
|
|
sim_fpu_neg (&out, &in);
|
|
FPU2FS (out, XS2FS (X,Sn));
|
|
}
|
|
}
|
|
|
|
// 1111 1001 1100 011X ---- Sn..; fneg FDn
|
|
8.0xf9+4.0xc,3.3,1.X+4.0,3.fn,1.0:D1b:::fneg
|
|
"fneg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0100 0110 Sm.. ---- Sn.. X-Z-; fneg FSm,FSn
|
|
8.0xfb+8.0x46+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fneg
|
|
"fneg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
sim_fpu in, out;
|
|
|
|
FS2FPU (XS2FS (X,Sm), in);
|
|
sim_fpu_neg (&out, &in);
|
|
FPU2FS (out, XS2FS (Z,Sn));
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1100 0110 fm.- ---- fn.- X-Z-; fneg FDm,FDn
|
|
8.0xfb+8.0xc6+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fneg
|
|
"fneg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1001 0101 000X ---- Sn..; frsqrt FSn
|
|
8.0xf9+4.5,3.0,1.X+4.0,4.Sn:D1a:::frsqrt
|
|
"frsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1101 000X ---- fn.-; frsqrt FDn
|
|
8.0xf9+4.0xd,3.0,1.X+4.0,3.fn,1.0:D1b:::frsqrt
|
|
"frsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0101 0000 Sm.. ---- Sn.. X-Z-; frsqrt FSm,FSn
|
|
8.0xfb+8.0x50+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::frsqrt
|
|
"frsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_rsqrt (SD, CPU, cia, &XS2FS (X,Sm), &XS2FS (Z,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1101 0000 fm.- ---- fn.- X-Z-; frsqrt FDm,FDn
|
|
8.0xfb+8.0xd0+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::frsqrt
|
|
"frsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1001 0101 001X ---- Sn..; fsqrt FSn
|
|
8.0xf9+4.5,3.1,1.X+4.0,4.Sn:D1a:::fsqrt
|
|
"fsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1001 1101 001X ---- fn.-; fsqrt FDn
|
|
8.0xf9+4.0xd,3.1,1.X+4.0,3.fn,1.0:D1b:::fsqrt
|
|
"fsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0101 0100 Sm.. ---- Sn.. X-Z-; fsqrt FSm,FSn
|
|
8.0xfb+8.0x54+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2a:::fsqrt
|
|
"fsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 1101 0100 fm.- ---- fn.- X-Z-; fsqrt FDm,FDn
|
|
8.0xfb+8.0xd4+3.fm,1.0,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2b:::fsqrt
|
|
"fsqrt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1001 0101 01YX Sm.. Sn..; fcmp FSm, FSn
|
|
8.0xf9+4.5,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fcmp
|
|
"fcmp"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_cmp (SD, CPU, cia, &XS2FS (X,Sn), &XS2FS (Y,Sm), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1101 01YX fm.- fn.-; fcmp FDm, FDn
|
|
8.0xf9+4.0xd,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fcmp
|
|
"fcmp"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1110 0011 01Y1 Sm.. ---- IMM32; fcmp imm32, FSm
|
|
8.0xfe+4.3,2.1,1.Y,1.1+4.Sm,4.0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fcmp
|
|
"fcmp"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
uint32 imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
|
|
fpu_cmp (SD, CPU, cia, &XS2FS (Y,Sm), &imm, FP_SINGLE);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0110 00YX Sm.. Sn..; fadd FSm, FSn
|
|
8.0xf9+4.6,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fadd
|
|
"fadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_add (SD, CPU, cia,
|
|
&XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1110 00YX fm.- fn.-; fadd FDm, FDn
|
|
8.0xf9+4.0xe,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fadd
|
|
"fadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0110 0000 Sm1. Sm2. Sn.. XYZ-; fadd FSm1, FSm2, FSn
|
|
8.0xfb+8.0x60+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fadd
|
|
"fadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_add (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1110 0000 fm1- fm2- fn.- XYZ-; fadd FDm1, FDm2, FDn
|
|
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
|
|
"fadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
|
|
// 1111 1110 0110 00YX Sm.. Sn.. IMM32; fadd imm32, FSm, FSn
|
|
8.0xfe+4.6,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fadd
|
|
"fadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
uint32 imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
|
|
fpu_add (SD, CPU, cia,
|
|
&XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0110 01YX Sm.. Sn..; fsub FSm, FSn
|
|
8.0xf9+4.6,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fsub
|
|
"fsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_sub (SD, CPU, cia,
|
|
&XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1110 01YX fm.- fn.-; fsub FDm, FDn
|
|
8.0xf9+4.0xe,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fsub
|
|
"fsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0110 0100 Sm1. Sm2. Sn.. XYZ-; fsub FSm1, FSm2, FSn
|
|
8.0xfb+8.0x64+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fsub
|
|
"fsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_sub (SD, CPU, cia,
|
|
&XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1110 0100 fm1- fm2- fn.- XYZ-; fsub FDm1, FDm2, FDn
|
|
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
|
|
"fsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
|
|
// 1111 1110 0110 01YX Sm.. Sn.. IMM32; fsub imm32, FSm, FSn
|
|
8.0xfe+4.6,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fsub
|
|
"fsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
uint32 imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
|
|
fpu_sub (SD, CPU, cia,
|
|
&XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0111 00YX Sm.. Sn..; fmul FSm, FSn
|
|
8.0xf9+4.7,2.0,1.Y,1.X+4.Sm,4.Sn:D1a:::fmul
|
|
"fmul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_mul (SD, CPU, cia,
|
|
&XS2FS (Y,Sm), &XS2FS (X,Sn), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1111 00YX fm.- fn.-; fmul FDm, FDn
|
|
8.0xf9+4.0xf,2.0,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fmul
|
|
"fmul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0111 0000 Sm1. Sm2. Sn.. XYZ-; fmul FSm1, FSm2, FSn
|
|
8.0xfb+8.0x70+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fmul
|
|
"fmul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_mul (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1111 0000 fm1- fm2- fn.- XYZ-; fmul FDm1, FDm2, FDn
|
|
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
|
|
"fmul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
|
|
// 1111 1110 0111 00YX Sm.. Sn.. IMM32; fmul imm32, FSm, FSn
|
|
8.0xfe+4.7,2.0,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fmul
|
|
"fmul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
uint32 imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
|
|
fpu_mul (SD, CPU, cia,
|
|
&imm, &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
}
|
|
|
|
// 1111 1001 0111 01YX Sm.. Sn..; fdiv FSm, FSn
|
|
8.0xf9+4.7,2.1,1.Y,1.X+4.Sm,4.Sn:D1a:::fdiv
|
|
"fdiv"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_div (SD, CPU, cia,
|
|
&XS2FS (X,Sn), &XS2FS (Y,Sm), &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1001 1111 01YX fm.- fn.-; fdiv FDm, FDn
|
|
8.0xf9+4.0xf,2.1,1.Y,1.X+3.fm,1.0,3.fn,1.0:D1b:::fdiv
|
|
"fdiv"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0111 0100 Sm1. Sm2. Sn.. XYZ-; fdiv FSm1, FSm2, FSn
|
|
8.0xfb+8.0x74+4.Sm1,4.Sm2+4.Sn,1.X,1.Y,1.Z,1.0:D2a:::fdiv
|
|
"fdiv"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_div (SD, CPU, cia,
|
|
&XS2FS (Y,Sm2), &XS2FS (X,Sm1), &XS2FS (Z,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1111 0100 fm1- fm2- fn.- XYZ-; fdiv FDm1, FDm2, FDn
|
|
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
|
|
"fdiv"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
|
|
// 1111 1110 0111 01YX Sm.. Sn.. IMM32; fdiv imm32, FSm, FSn
|
|
8.0xfe+4.7,2.1,1.Y,1.X+4.Sm,4.Sn+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D5:::fdiv
|
|
"fdiv"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
{
|
|
uint32 imm = FETCH32 (IMM32A, IMM32B, IMM32C, IMM32D);
|
|
|
|
fpu_div (SD, CPU, cia,
|
|
&XS2FS (Y,Sm), &imm, &XS2FS (X,Sn), FP_SINGLE);
|
|
}
|
|
}
|
|
|
|
// 1111 1011 1000 00Sn Sm1. Sm2. Sm3. XYZA; fmadd FSm1, FSm2, FSm3, FSn
|
|
8.0xfb+4.8,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmadd
|
|
"fmadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_fmadd (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
|
|
&AS2FS (A,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1000 01Sn Sm1. Sm2. Sm3. XYZA; fmsub FSm1, FSm2, FSm3, FSn
|
|
8.0xfb+4.8,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fmsub
|
|
"fmsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_fmsub (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
|
|
&AS2FS (A,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1001 00Sn Sm1. Sm2. Sm3. XYZA; fnmadd FSm1, FSm2, FSm3, FSn
|
|
8.0xfb+4.9,2.0,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmadd
|
|
"fnmadd"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_fnmadd (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
|
|
&AS2FS (A,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// 1111 1011 1001 01Sn Sm1. Sm2. Sm3. XYZA; fnmsub FSm1, FSm2, FSm3, FSn
|
|
8.0xfb+4.9,2.1,2.Sn+4.Sm1,4.Sm2+4.Sm3,1.X,1.Y,1.Z,1.A:D2:::fnmsub
|
|
"fnmsub"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_fnmsub (SD, CPU, cia,
|
|
&XS2FS (X,Sm1), &XS2FS (Y,Sm2), &XS2FS (Z,Sm3),
|
|
&AS2FS (A,Sn), FP_SINGLE);
|
|
}
|
|
|
|
// conversion:
|
|
|
|
// 1111 1011 0100 0000 Sm.. ---- Sn.. X-Z-; ftoi FSm,FSn
|
|
8.0xfb+8.0x40+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::ftoi
|
|
"ftoi"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0100 0010 Sm.. ---- Sn.. X-Z-; itof FSm,FSn
|
|
8.0xfb+8.0x42+4.Sm,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::itof
|
|
"itof"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0101 0010 Sm.. ---- fn.- X-Z-; ftod FSm,FDn
|
|
8.0xfb+8.0x52+4.Sm,4.0+3.fn,1.0,1.X,1.0,1.Z,1.0:D2:::ftod
|
|
"ftod"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// 1111 1011 0101 0110 fm.- ---- Sn.. X-Z-; dtof FDm,FSn
|
|
8.0xfb+8.0x56+3.fm,1.0,4.0+4.Sn,1.X,1.0,1.Z,1.0:D2:::dtof
|
|
"dtof"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else
|
|
fpu_unimp_exception (SD, CPU, cia);
|
|
}
|
|
|
|
// branching:
|
|
|
|
// 1111 1000 1101 0000 d8; fbeq (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd0+8.D8:D1:::fbeq
|
|
"fbeq"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_E))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0001 d8; fbne (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd1+8.D8:D1:::fbne
|
|
"fbne"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0010 d8; fbgt (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd2+8.D8:D1:::fbgt
|
|
"fbgt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_G))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0011 d8; fbge (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd3+8.D8:D1:::fbge
|
|
"fbge"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_G | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0100 d8; fblt (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd4+8.D8:D1:::fblt
|
|
"fblt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_L))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0101 d8; fble (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd5+8.D8:D1:::fble
|
|
"fble"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0110 d8; fbuo (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd6+8.D8:D1:::fbuo
|
|
"fbuo"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_U))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 0111 d8; fblg (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd7+8.D8:D1:::fblg
|
|
"fblg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
// 1111 1000 1101 1000 d8; fbleg (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd8+8.D8:D1:::fbleg
|
|
"fbleg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_E | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 1001 d8; fbug (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xd9+8.D8:D1:::fbug
|
|
"fbug"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 1010 d8; fbuge (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xda+8.D8:D1:::fbuge
|
|
"fbuge"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_G | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 1011 d8; fbul (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xdb+8.D8:D1:::fbul
|
|
"fbul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 1100 d8; fbule (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xdc+8.D8:D1:::fbule
|
|
"fbule"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 1000 1101 1101 d8; fbue (d8,PC) (d8 is sign-extended)
|
|
8.0xf8+8.0xdd+8.D8:D1:::fbue
|
|
"fbue"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] += EXTEND8 (D8);
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0000; fleq
|
|
8.0xf0+8.0xd0:D0:::fleq
|
|
"fleq"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_E))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0001; flne
|
|
8.0xf0+8.0xd1:D0:::flne
|
|
"flne"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0010; flgt
|
|
8.0xf0+8.0xd2:D0:::flgt
|
|
"flgt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_G))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0011; flge
|
|
8.0xf0+8.0xd3:D0:::flge
|
|
"flge"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_G | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0100; fllt
|
|
8.0xf0+8.0xd4:D0:::fllt
|
|
"fllt"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_L))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0101; flle
|
|
8.0xf0+8.0xd5:D0:::flle
|
|
"flle"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0110; fluo
|
|
8.0xf0+8.0xd6:D0:::fluo
|
|
"fluo"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & FCC_U))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 0111; fllg
|
|
8.0xf0+8.0xd7:D0:::fllg
|
|
"fllg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
// 1111 0000 1101 1000; flleg
|
|
8.0xf0+8.0xd8:D0:::flleg
|
|
"flleg"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_L | FCC_E | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 1001; flug
|
|
8.0xf0+8.0xd9:D0:::flug
|
|
"flug"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_G)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 1010; fluge
|
|
8.0xf0+8.0xda:D0:::fluge
|
|
"fluge"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_G | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 1011; flul
|
|
8.0xf0+8.0xdb:D0:::flul
|
|
"flul"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 1100; flule
|
|
8.0xf0+8.0xdc:D0:::flule
|
|
"flule"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_L | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|
|
|
|
// 1111 0000 1101 1101; flue
|
|
8.0xf0+8.0xdd:D0:::flue
|
|
"flue"
|
|
*am33_2
|
|
{
|
|
PC = cia;
|
|
|
|
if (FPU_DISABLED)
|
|
fpu_disabled_exception (SD, CPU, cia);
|
|
else if ((FPCR & (FCC_U | FCC_E)))
|
|
{
|
|
State.regs[REG_PC] = State.regs[REG_LAR] - 4;
|
|
nia = PC;
|
|
}
|
|
}
|