1 #define _GEN_FLOAT_ACB(name, op, op1, op2, isfloat, set_fprf, type) \
2 GEN_HANDLER(f##name, op1, op2, 0xFF, 0x00000000, type)
3 #define GEN_FLOAT_ACB(name, op2, set_fprf, type) \
4 _GEN_FLOAT_ACB(name, name, 0x3F, op2, 0, set_fprf, type), \
5 _GEN_FLOAT_ACB(name##s, name, 0x3B, op2, 1, set_fprf, type)
6 #define _GEN_FLOAT_AB(name, op, op1, op2, inval, isfloat, set_fprf, type) \
7 GEN_HANDLER(f##name, op1, op2, 0xFF, inval, type)
8 #define GEN_FLOAT_AB(name, op2, inval, set_fprf, type) \
9 _GEN_FLOAT_AB(name, name, 0x3F, op2, inval, 0, set_fprf, type), \
10 _GEN_FLOAT_AB(name##s, name, 0x3B, op2, inval, 1, set_fprf, type)
11 #define _GEN_FLOAT_AC(name, op, op1, op2, inval, isfloat, set_fprf, type) \
12 GEN_HANDLER(f##name, op1, op2, 0xFF, inval, type)
13 #define GEN_FLOAT_AC(name, op2, inval, set_fprf, type) \
14 _GEN_FLOAT_AC(name, name, 0x3F, op2, inval, 0, set_fprf, type), \
15 _GEN_FLOAT_AC(name##s, name, 0x3B, op2, inval, 1, set_fprf, type)
16 #define GEN_FLOAT_B(name, op2, op3, set_fprf, type) \
17 GEN_HANDLER(f##name, 0x3F, op2, op3, 0x001F0000, type)
18 #define GEN_FLOAT_BS(name, op1, op2, set_fprf, type) \
19 GEN_HANDLER(f##name, op1, op2, 0xFF, 0x001F07C0, type)
21 GEN_FLOAT_AB(add
, 0x15, 0x000007C0, 1, PPC_FLOAT
),
22 GEN_FLOAT_AB(div
, 0x12, 0x000007C0, 1, PPC_FLOAT
),
23 GEN_FLOAT_AC(mul
, 0x19, 0x0000F800, 1, PPC_FLOAT
),
24 GEN_FLOAT_BS(re
, 0x3F, 0x18, 1, PPC_FLOAT_EXT
),
25 GEN_FLOAT_BS(res
, 0x3B, 0x18, 1, PPC_FLOAT_FRES
),
26 GEN_FLOAT_BS(rsqrte
, 0x3F, 0x1A, 1, PPC_FLOAT_FRSQRTE
),
27 _GEN_FLOAT_ACB(sel
, sel
, 0x3F, 0x17, 0, 0, PPC_FLOAT_FSEL
),
28 GEN_FLOAT_AB(sub
, 0x14, 0x000007C0, 1, PPC_FLOAT
),
29 GEN_FLOAT_ACB(madd
, 0x1D, 1, PPC_FLOAT
),
30 GEN_FLOAT_ACB(msub
, 0x1C, 1, PPC_FLOAT
),
31 GEN_FLOAT_ACB(nmadd
, 0x1F, 1, PPC_FLOAT
),
32 GEN_FLOAT_ACB(nmsub
, 0x1E, 1, PPC_FLOAT
),
33 GEN_HANDLER_E(ftdiv
, 0x3F, 0x00, 0x04, 1, PPC_NONE
, PPC2_FP_TST_ISA206
),
34 GEN_HANDLER_E(ftsqrt
, 0x3F, 0x00, 0x05, 1, PPC_NONE
, PPC2_FP_TST_ISA206
),
35 GEN_FLOAT_B(ctiw
, 0x0E, 0x00, 0, PPC_FLOAT
),
36 GEN_HANDLER_E(fctiwu
, 0x3F, 0x0E, 0x04, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
37 GEN_FLOAT_B(ctiwz
, 0x0F, 0x00, 0, PPC_FLOAT
),
38 GEN_HANDLER_E(fctiwuz
, 0x3F, 0x0F, 0x04, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
39 GEN_FLOAT_B(rsp
, 0x0C, 0x00, 1, PPC_FLOAT
),
40 GEN_HANDLER_E(fcfid
, 0x3F, 0x0E, 0x1A, 0x001F0000, PPC_NONE
, PPC2_FP_CVT_S64
),
41 GEN_HANDLER_E(fcfids
, 0x3B, 0x0E, 0x1A, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
42 GEN_HANDLER_E(fcfidu
, 0x3F, 0x0E, 0x1E, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
43 GEN_HANDLER_E(fcfidus
, 0x3B, 0x0E, 0x1E, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
44 GEN_HANDLER_E(fctid
, 0x3F, 0x0E, 0x19, 0x001F0000, PPC_NONE
, PPC2_FP_CVT_S64
),
45 GEN_HANDLER_E(fctidu
, 0x3F, 0x0E, 0x1D, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
46 GEN_HANDLER_E(fctidz
, 0x3F, 0x0F, 0x19, 0x001F0000, PPC_NONE
, PPC2_FP_CVT_S64
),
47 GEN_HANDLER_E(fctiduz
, 0x3F, 0x0F, 0x1D, 0, PPC_NONE
, PPC2_FP_CVT_ISA206
),
48 GEN_FLOAT_B(rin
, 0x08, 0x0C, 1, PPC_FLOAT_EXT
),
49 GEN_FLOAT_B(riz
, 0x08, 0x0D, 1, PPC_FLOAT_EXT
),
50 GEN_FLOAT_B(rip
, 0x08, 0x0E, 1, PPC_FLOAT_EXT
),
51 GEN_FLOAT_B(rim
, 0x08, 0x0F, 1, PPC_FLOAT_EXT
),
53 #define GEN_LDF(name, ldop, opc, type) \
54 GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type),
55 #define GEN_LDUF(name, ldop, opc, type) \
56 GEN_HANDLER(name##u, opc, 0xFF, 0xFF, 0x00000000, type),
57 #define GEN_LDUXF(name, ldop, opc, type) \
58 GEN_HANDLER(name##ux, 0x1F, 0x17, opc, 0x00000001, type),
59 #define GEN_LDXF(name, ldop, opc2, opc3, type) \
60 GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type),
61 #define GEN_LDFS(name, ldop, op, type) \
62 GEN_LDF(name, ldop, op | 0x20, type) \
63 GEN_LDUF(name, ldop, op | 0x21, type) \
64 GEN_LDUXF(name, ldop, op | 0x01, type) \
65 GEN_LDXF(name, ldop, 0x17, op | 0x00, type)
67 GEN_LDFS(lfd
, ld64
, 0x12, PPC_FLOAT
)
68 GEN_LDFS(lfs
, ld32fs
, 0x10, PPC_FLOAT
)
69 GEN_HANDLER_E(lfiwax
, 0x1f, 0x17, 0x1a, 0x00000001, PPC_NONE
, PPC2_ISA205
),
70 GEN_HANDLER_E(lfiwzx
, 0x1f, 0x17, 0x1b, 0x1, PPC_NONE
, PPC2_FP_CVT_ISA206
),
71 GEN_HANDLER_E(lfdp
, 0x39, 0xFF, 0xFF, 0x00200003, PPC_NONE
, PPC2_ISA205
),
72 GEN_HANDLER_E(lfdpx
, 0x1F, 0x17, 0x18, 0x00200001, PPC_NONE
, PPC2_ISA205
),
74 #define GEN_STF(name, stop, opc, type) \
75 GEN_HANDLER(name, opc, 0xFF, 0xFF, 0x00000000, type),
76 #define GEN_STUF(name, stop, opc, type) \
77 GEN_HANDLER(name##u, opc, 0xFF, 0xFF, 0x00000000, type),
78 #define GEN_STUXF(name, stop, opc, type) \
79 GEN_HANDLER(name##ux, 0x1F, 0x17, opc, 0x00000001, type),
80 #define GEN_STXF(name, stop, opc2, opc3, type) \
81 GEN_HANDLER(name##x, 0x1F, opc2, opc3, 0x00000001, type),
82 #define GEN_STFS(name, stop, op, type) \
83 GEN_STF(name, stop, op | 0x20, type) \
84 GEN_STUF(name, stop, op | 0x21, type) \
85 GEN_STUXF(name, stop, op | 0x01, type) \
86 GEN_STXF(name, stop, 0x17, op | 0x00, type)
88 GEN_STFS(stfd
, st64_i64
, 0x16, PPC_FLOAT
)
89 GEN_STFS(stfs
, st32fs
, 0x14, PPC_FLOAT
)
90 GEN_STXF(stfiw
, st32fiw
, 0x17, 0x1E, PPC_FLOAT_STFIWX
)
91 GEN_HANDLER_E(stfdp
, 0x3D, 0xFF, 0xFF, 0x00200003, PPC_NONE
, PPC2_ISA205
),
92 GEN_HANDLER_E(stfdpx
, 0x1F, 0x17, 0x1C, 0x00200001, PPC_NONE
, PPC2_ISA205
),
94 GEN_HANDLER(frsqrtes
, 0x3B, 0x1A, 0xFF, 0x001F07C0, PPC_FLOAT_FRSQRTES
),
95 GEN_HANDLER(fsqrt
, 0x3F, 0x16, 0xFF, 0x001F07C0, PPC_FLOAT_FSQRT
),
96 GEN_HANDLER(fsqrts
, 0x3B, 0x16, 0xFF, 0x001F07C0, PPC_FLOAT_FSQRT
),
97 GEN_HANDLER(fcmpo
, 0x3F, 0x00, 0x01, 0x00600001, PPC_FLOAT
),
98 GEN_HANDLER(fcmpu
, 0x3F, 0x00, 0x00, 0x00600001, PPC_FLOAT
),
99 GEN_HANDLER(fabs
, 0x3F, 0x08, 0x08, 0x001F0000, PPC_FLOAT
),
100 GEN_HANDLER(fmr
, 0x3F, 0x08, 0x02, 0x001F0000, PPC_FLOAT
),
101 GEN_HANDLER(fnabs
, 0x3F, 0x08, 0x04, 0x001F0000, PPC_FLOAT
),
102 GEN_HANDLER(fneg
, 0x3F, 0x08, 0x01, 0x001F0000, PPC_FLOAT
),
103 GEN_HANDLER_E(fcpsgn
, 0x3F, 0x08, 0x00, 0x00000000, PPC_NONE
, PPC2_ISA205
),
104 GEN_HANDLER_E(fmrgew
, 0x3F, 0x06, 0x1E, 0x00000001, PPC_NONE
, PPC2_VSX207
),
105 GEN_HANDLER_E(fmrgow
, 0x3F, 0x06, 0x1A, 0x00000001, PPC_NONE
, PPC2_VSX207
),
106 GEN_HANDLER(mcrfs
, 0x3F, 0x00, 0x02, 0x0063F801, PPC_FLOAT
),
107 GEN_HANDLER(mffs
, 0x3F, 0x07, 0x12, 0x001FF800, PPC_FLOAT
),
108 GEN_HANDLER(mtfsb0
, 0x3F, 0x06, 0x02, 0x001FF800, PPC_FLOAT
),
109 GEN_HANDLER(mtfsb1
, 0x3F, 0x06, 0x01, 0x001FF800, PPC_FLOAT
),
110 GEN_HANDLER(mtfsf
, 0x3F, 0x07, 0x16, 0x00000000, PPC_FLOAT
),
111 GEN_HANDLER(mtfsfi
, 0x3F, 0x06, 0x04, 0x006e0800, PPC_FLOAT
),