]> git.proxmox.com Git - mirror_qemu.git/blame - target/ppc/translate/vsx-ops.inc.c
ppc: implement xssqrtqp instruction
[mirror_qemu.git] / target / ppc / translate / vsx-ops.inc.c
CommitLineData
3014427a
BH
1GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX),
2GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),
3GEN_HANDLER_E(lxsiwzx, 0x1F, 0x0C, 0x00, 0, PPC_NONE, PPC2_VSX207),
740ae9a2
ND
4GEN_HANDLER_E(lxsibzx, 0x1F, 0x0D, 0x18, 0, PPC_NONE, PPC2_ISA300),
5GEN_HANDLER_E(lxsihzx, 0x1F, 0x0D, 0x19, 0, PPC_NONE, PPC2_ISA300),
3014427a
BH
6GEN_HANDLER_E(lxsspx, 0x1F, 0x0C, 0x10, 0, PPC_NONE, PPC2_VSX207),
7GEN_HANDLER_E(lxvd2x, 0x1F, 0x0C, 0x1A, 0, PPC_NONE, PPC2_VSX),
8GEN_HANDLER_E(lxvdsx, 0x1F, 0x0C, 0x0A, 0, PPC_NONE, PPC2_VSX),
9GEN_HANDLER_E(lxvw4x, 0x1F, 0x0C, 0x18, 0, PPC_NONE, PPC2_VSX),
1c074419 10GEN_HANDLER_E(lxvh8x, 0x1F, 0x0C, 0x19, 0, PPC_NONE, PPC2_ISA300),
8ee38fac 11GEN_HANDLER_E(lxvb16x, 0x1F, 0x0C, 0x1B, 0, PPC_NONE, PPC2_ISA300),
d59ba583 12GEN_HANDLER_E(lxvx, 0x1F, 0x0C, 0x08, 0x00000040, PPC_NONE, PPC2_ISA300),
6914bc4f
ND
13#if defined(TARGET_PPC64)
14GEN_HANDLER_E(lxvl, 0x1F, 0x0D, 0x08, 0, PPC_NONE, PPC2_ISA300),
176e44e7 15GEN_HANDLER_E(lxvll, 0x1F, 0x0D, 0x09, 0, PPC_NONE, PPC2_ISA300),
6914bc4f 16#endif
3014427a
BH
17
18GEN_HANDLER_E(stxsdx, 0x1F, 0xC, 0x16, 0, PPC_NONE, PPC2_VSX),
ddb9ac50
ND
19GEN_HANDLER_E(stxsibx, 0x1F, 0xD, 0x1C, 0, PPC_NONE, PPC2_ISA300),
20GEN_HANDLER_E(stxsihx, 0x1F, 0xD, 0x1D, 0, PPC_NONE, PPC2_ISA300),
3014427a
BH
21GEN_HANDLER_E(stxsiwx, 0x1F, 0xC, 0x04, 0, PPC_NONE, PPC2_VSX207),
22GEN_HANDLER_E(stxsspx, 0x1F, 0xC, 0x14, 0, PPC_NONE, PPC2_VSX207),
23GEN_HANDLER_E(stxvd2x, 0x1F, 0xC, 0x1E, 0, PPC_NONE, PPC2_VSX),
24GEN_HANDLER_E(stxvw4x, 0x1F, 0xC, 0x1C, 0, PPC_NONE, PPC2_VSX),
0b8ac648 25GEN_HANDLER_E(stxvh8x, 0x1F, 0x0C, 0x1D, 0, PPC_NONE, PPC2_ISA300),
f3333ce0 26GEN_HANDLER_E(stxvb16x, 0x1F, 0x0C, 0x1F, 0, PPC_NONE, PPC2_ISA300),
d59ba583 27GEN_HANDLER_E(stxvx, 0x1F, 0x0C, 0x0C, 0, PPC_NONE, PPC2_ISA300),
681c2478
ND
28#if defined(TARGET_PPC64)
29GEN_HANDLER_E(stxvl, 0x1F, 0x0D, 0x0C, 0, PPC_NONE, PPC2_ISA300),
e122090d 30GEN_HANDLER_E(stxvll, 0x1F, 0x0D, 0x0D, 0, PPC_NONE, PPC2_ISA300),
681c2478 31#endif
3014427a
BH
32
33GEN_HANDLER_E(mfvsrwz, 0x1F, 0x13, 0x03, 0x0000F800, PPC_NONE, PPC2_VSX207),
34GEN_HANDLER_E(mtvsrwa, 0x1F, 0x13, 0x06, 0x0000F800, PPC_NONE, PPC2_VSX207),
35GEN_HANDLER_E(mtvsrwz, 0x1F, 0x13, 0x07, 0x0000F800, PPC_NONE, PPC2_VSX207),
36#if defined(TARGET_PPC64)
37GEN_HANDLER_E(mfvsrd, 0x1F, 0x13, 0x01, 0x0000F800, PPC_NONE, PPC2_VSX207),
38GEN_HANDLER_E(mtvsrd, 0x1F, 0x13, 0x05, 0x0000F800, PPC_NONE, PPC2_VSX207),
63583202 39GEN_HANDLER_E(mfvsrld, 0X1F, 0x13, 0x09, 0x0000F800, PPC_NONE, PPC2_ISA300),
b9731075 40GEN_HANDLER_E(mtvsrdd, 0X1F, 0x13, 0x0D, 0x0, PPC_NONE, PPC2_ISA300),
1a136cdc 41GEN_HANDLER_E(mtvsrws, 0x1F, 0x13, 0x0C, 0x0000F800, PPC_NONE, PPC2_ISA300),
3014427a
BH
42#endif
43
f1132835
ND
44#define GEN_XX1FORM(name, opc2, opc3, fl2) \
45GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0, opc3, 0, PPC_NONE, fl2), \
46GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 1, opc3, 0, PPC_NONE, fl2)
47
3014427a
BH
48#define GEN_XX2FORM(name, opc2, opc3, fl2) \
49GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0, opc3, 0, PPC_NONE, fl2), \
50GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 1, opc3, 0, PPC_NONE, fl2)
51
8ad901e5
ND
52#define GEN_XX2FORM_EXT(name, opc2, opc3, fl2) \
53GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0, opc3, 0x00100000, PPC_NONE, fl2), \
54GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 1, opc3, 0x00100000, PPC_NONE, fl2)
55
14fd8ab2
ND
56#define GEN_XX2FORM_EO(name, opc2, opc3, opc4, fl2) \
57GEN_HANDLER2_E_2(name, #name, 0x3C, opc2 | 0, opc3, opc4, 0, PPC_NONE, fl2), \
58GEN_HANDLER2_E_2(name, #name, 0x3C, opc2 | 1, opc3, opc4, 0, PPC_NONE, fl2)
59
3014427a
BH
60#define GEN_XX3FORM(name, opc2, opc3, fl2) \
61GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0, opc3, 0, PPC_NONE, fl2), \
62GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 1, opc3, 0, PPC_NONE, fl2), \
63GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 2, opc3, 0, PPC_NONE, fl2), \
64GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 3, opc3, 0, PPC_NONE, fl2)
65
66#define GEN_XX2IFORM(name, opc2, opc3, fl2) \
67GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0, opc3, 1, PPC_NONE, fl2), \
68GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 1, opc3, 1, PPC_NONE, fl2), \
69GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 2, opc3, 1, PPC_NONE, fl2), \
70GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 3, opc3, 1, PPC_NONE, fl2)
71
72#define GEN_XX3_RC_FORM(name, opc2, opc3, fl2) \
73GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x00, opc3 | 0x00, 0, PPC_NONE, fl2), \
74GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x01, opc3 | 0x00, 0, PPC_NONE, fl2), \
75GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x02, opc3 | 0x00, 0, PPC_NONE, fl2), \
76GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x03, opc3 | 0x00, 0, PPC_NONE, fl2), \
77GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x00, opc3 | 0x10, 0, PPC_NONE, fl2), \
78GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x01, opc3 | 0x10, 0, PPC_NONE, fl2), \
79GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x02, opc3 | 0x10, 0, PPC_NONE, fl2), \
80GEN_HANDLER2_E(name, #name, 0x3C, opc2 | 0x03, opc3 | 0x10, 0, PPC_NONE, fl2)
81
82#define GEN_XX3FORM_DM(name, opc2, opc3) \
83GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x00, opc3|0x00, 0, PPC_NONE, PPC2_VSX),\
84GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x01, opc3|0x00, 0, PPC_NONE, PPC2_VSX),\
85GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x02, opc3|0x00, 0, PPC_NONE, PPC2_VSX),\
86GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x03, opc3|0x00, 0, PPC_NONE, PPC2_VSX),\
87GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x00, opc3|0x04, 0, PPC_NONE, PPC2_VSX),\
88GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x01, opc3|0x04, 0, PPC_NONE, PPC2_VSX),\
89GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x02, opc3|0x04, 0, PPC_NONE, PPC2_VSX),\
90GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x03, opc3|0x04, 0, PPC_NONE, PPC2_VSX),\
91GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x00, opc3|0x08, 0, PPC_NONE, PPC2_VSX),\
92GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x01, opc3|0x08, 0, PPC_NONE, PPC2_VSX),\
93GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x02, opc3|0x08, 0, PPC_NONE, PPC2_VSX),\
94GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x03, opc3|0x08, 0, PPC_NONE, PPC2_VSX),\
95GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x00, opc3|0x0C, 0, PPC_NONE, PPC2_VSX),\
96GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x01, opc3|0x0C, 0, PPC_NONE, PPC2_VSX),\
97GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x02, opc3|0x0C, 0, PPC_NONE, PPC2_VSX),\
98GEN_HANDLER2_E(name, #name, 0x3C, opc2|0x03, opc3|0x0C, 0, PPC_NONE, PPC2_VSX)
99
3a20d11d
BR
100#define GEN_VSX_XFORM_300(name, opc2, opc3, inval) \
101GEN_HANDLER_E(name, 0x3F, opc2, opc3, inval, PPC_NONE, PPC2_ISA300)
102
3259dbd9
DG
103#define GEN_VSX_XFORM_300_EO(name, opc2, opc3, opc4, inval) \
104GEN_HANDLER_E_2(name, 0x3F, opc2, opc3, opc4, inval, PPC_NONE, PPC2_ISA300)
3a20d11d 105
be07ad58
JRZ
106#define GEN_VSX_Z23FORM_300(name, opc2, opc3, opc4, inval) \
107GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x00, opc4 | 0x0, inval), \
108GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x08, opc4 | 0x0, inval), \
109GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x10, opc4 | 0x0, inval), \
110GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x18, opc4 | 0x0, inval), \
111GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x00, opc4 | 0x1, inval), \
112GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x08, opc4 | 0x1, inval), \
113GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x10, opc4 | 0x1, inval), \
114GEN_VSX_XFORM_300_EO(name, opc2, opc3 | 0x18, opc4 | 0x1, inval)
115
116GEN_VSX_Z23FORM_300(xsrqpi, 0x05, 0x0, 0x0, 0x0),
917950d7 117GEN_VSX_Z23FORM_300(xsrqpxp, 0x05, 0x1, 0x0, 0x0),
a4a68476 118GEN_VSX_XFORM_300_EO(xssqrtqp, 0x04, 0x19, 0x1B, 0x00000001),
be07ad58 119
3014427a
BH
120GEN_XX2FORM(xsabsdp, 0x12, 0x15, PPC2_VSX),
121GEN_XX2FORM(xsnabsdp, 0x12, 0x16, PPC2_VSX),
122GEN_XX2FORM(xsnegdp, 0x12, 0x17, PPC2_VSX),
123GEN_XX3FORM(xscpsgndp, 0x00, 0x16, PPC2_VSX),
124
3259dbd9
DG
125GEN_VSX_XFORM_300_EO(xsabsqp, 0x04, 0x19, 0x00, 0x00000001),
126GEN_VSX_XFORM_300_EO(xsnabsqp, 0x04, 0x19, 0x08, 0x00000001),
8497d7fc 127GEN_VSX_XFORM_300_EO(xsnegqp, 0x04, 0x19, 0x10, 0x00000001),
014ed3bb 128GEN_VSX_XFORM_300(xscpsgnqp, 0x04, 0x03, 0x00000001),
e5487803 129GEN_VSX_XFORM_300_EO(xscvdpqp, 0x04, 0x1A, 0x16, 0x00000001),
2a084dad 130GEN_VSX_XFORM_300_EO(xscvqpdp, 0x04, 0x1A, 0x14, 0x0),
05590b92
BR
131GEN_VSX_XFORM_300_EO(xscvqpsdz, 0x04, 0x1A, 0x19, 0x00000001),
132GEN_VSX_XFORM_300_EO(xscvqpswz, 0x04, 0x1A, 0x09, 0x00000001),
3259dbd9 133
08e14986
ND
134#ifdef TARGET_PPC64
135GEN_XX2FORM_EO(xsxexpdp, 0x16, 0x15, 0x00, PPC2_ISA300),
9eceae32 136GEN_VSX_XFORM_300_EO(xsxexpqp, 0x04, 0x19, 0x02, 0x00000001),
05538220 137GEN_XX2FORM_EO(xsxsigdp, 0x16, 0x15, 0x01, PPC2_ISA300),
29f8ddb7 138GEN_VSX_XFORM_300_EO(xsxsigqp, 0x04, 0x19, 0x12, 0x00000001),
1b8d663d 139GEN_HANDLER_E(xsiexpdp, 0x3C, 0x16, 0x1C, 0, PPC_NONE, PPC2_ISA300),
8a9472ec 140GEN_VSX_XFORM_300(xsiexpqp, 0x4, 0x1B, 0x00000001),
08e14986
ND
141#endif
142
78241762
ND
143GEN_XX2FORM(xststdcdp, 0x14, 0x16, PPC2_ISA300),
144GEN_XX2FORM(xststdcsp, 0x14, 0x12, PPC2_ISA300),
145GEN_VSX_XFORM_300(xststdcqp, 0x04, 0x16, 0x00000001),
146
d9031405 147GEN_XX3FORM(xviexpsp, 0x00, 0x1B, PPC2_ISA300),
e385e4b7 148GEN_XX3FORM(xviexpdp, 0x00, 0x1F, PPC2_ISA300),
46804e28 149GEN_XX2FORM_EO(xvxexpdp, 0x16, 0x1D, 0x00, PPC2_ISA300),
cf9465a1 150GEN_XX2FORM_EO(xvxsigdp, 0x16, 0x1D, 0x01, PPC2_ISA300),
08f1ee5a 151GEN_XX2FORM_EO(xvxexpsp, 0x16, 0x1D, 0x08, PPC2_ISA300),
c5969d2e 152GEN_XX2FORM_EO(xvxsigsp, 0x16, 0x1D, 0x09, PPC2_ISA300),
d9031405 153
403a884a
ND
154/* DCMX = bit[25] << 6 | bit[29] << 5 | bit[11:15] */
155#define GEN_XX2FORM_DCMX(name, opc2, opc3, fl2) \
156GEN_XX3FORM(name, opc2, opc3 | 0, fl2), \
157GEN_XX3FORM(name, opc2, opc3 | 1, fl2)
158
159GEN_XX2FORM_DCMX(xvtstdcdp, 0x14, 0x1E, PPC2_ISA300),
160GEN_XX2FORM_DCMX(xvtstdcsp, 0x14, 0x1A, PPC2_ISA300),
161
3014427a
BH
162GEN_XX2FORM(xvabsdp, 0x12, 0x1D, PPC2_VSX),
163GEN_XX2FORM(xvnabsdp, 0x12, 0x1E, PPC2_VSX),
164GEN_XX2FORM(xvnegdp, 0x12, 0x1F, PPC2_VSX),
165GEN_XX3FORM(xvcpsgndp, 0x00, 0x1E, PPC2_VSX),
166GEN_XX2FORM(xvabssp, 0x12, 0x19, PPC2_VSX),
167GEN_XX2FORM(xvnabssp, 0x12, 0x1A, PPC2_VSX),
168GEN_XX2FORM(xvnegsp, 0x12, 0x1B, PPC2_VSX),
169GEN_XX3FORM(xvcpsgnsp, 0x00, 0x1A, PPC2_VSX),
170
171GEN_XX3FORM(xsadddp, 0x00, 0x04, PPC2_VSX),
07bdd247 172GEN_VSX_XFORM_300(xsaddqp, 0x04, 0x00, 0x0),
3014427a
BH
173GEN_XX3FORM(xssubdp, 0x00, 0x05, PPC2_VSX),
174GEN_XX3FORM(xsmuldp, 0x00, 0x06, PPC2_VSX),
a811ec04 175GEN_VSX_XFORM_300(xsmulqp, 0x04, 0x01, 0x0),
3014427a
BH
176GEN_XX3FORM(xsdivdp, 0x00, 0x07, PPC2_VSX),
177GEN_XX2FORM(xsredp, 0x14, 0x05, PPC2_VSX),
178GEN_XX2FORM(xssqrtdp, 0x16, 0x04, PPC2_VSX),
179GEN_XX2FORM(xsrsqrtedp, 0x14, 0x04, PPC2_VSX),
180GEN_XX3FORM(xstdivdp, 0x14, 0x07, PPC2_VSX),
181GEN_XX2FORM(xstsqrtdp, 0x14, 0x06, PPC2_VSX),
182GEN_XX3FORM(xsmaddadp, 0x04, 0x04, PPC2_VSX),
183GEN_XX3FORM(xsmaddmdp, 0x04, 0x05, PPC2_VSX),
184GEN_XX3FORM(xsmsubadp, 0x04, 0x06, PPC2_VSX),
185GEN_XX3FORM(xsmsubmdp, 0x04, 0x07, PPC2_VSX),
186GEN_XX3FORM(xsnmaddadp, 0x04, 0x14, PPC2_VSX),
187GEN_XX3FORM(xsnmaddmdp, 0x04, 0x15, PPC2_VSX),
188GEN_XX3FORM(xsnmsubadp, 0x04, 0x16, PPC2_VSX),
189GEN_XX3FORM(xsnmsubmdp, 0x04, 0x17, PPC2_VSX),
6d1ff9a7
SD
190GEN_XX3FORM(xscmpeqdp, 0x0C, 0x00, PPC2_ISA300),
191GEN_XX3FORM(xscmpgtdp, 0x0C, 0x01, PPC2_ISA300),
192GEN_XX3FORM(xscmpgedp, 0x0C, 0x02, PPC2_ISA300),
193GEN_XX3FORM(xscmpnedp, 0x0C, 0x03, PPC2_ISA300),
3a20d11d
BR
194GEN_XX3FORM(xscmpexpdp, 0x0C, 0x07, PPC2_ISA300),
195GEN_VSX_XFORM_300(xscmpexpqp, 0x04, 0x05, 0x00600001),
3014427a
BH
196GEN_XX2IFORM(xscmpodp, 0x0C, 0x05, PPC2_VSX),
197GEN_XX2IFORM(xscmpudp, 0x0C, 0x04, PPC2_VSX),
be0a4faf
BR
198GEN_VSX_XFORM_300(xscmpoqp, 0x04, 0x04, 0x00600001),
199GEN_VSX_XFORM_300(xscmpuqp, 0x04, 0x14, 0x00600001),
3014427a
BH
200GEN_XX3FORM(xsmaxdp, 0x00, 0x14, PPC2_VSX),
201GEN_XX3FORM(xsmindp, 0x00, 0x15, PPC2_VSX),
f566c047 202GEN_XX2FORM_EO(xscvdphp, 0x16, 0x15, 0x11, PPC2_ISA300),
3014427a
BH
203GEN_XX2FORM(xscvdpsp, 0x12, 0x10, PPC2_VSX),
204GEN_XX2FORM(xscvdpspn, 0x16, 0x10, PPC2_VSX207),
f566c047 205GEN_XX2FORM_EO(xscvhpdp, 0x16, 0x15, 0x10, PPC2_ISA300),
48ef23cb 206GEN_VSX_XFORM_300_EO(xscvsdqp, 0x04, 0x1A, 0x0A, 0x00000001),
3014427a
BH
207GEN_XX2FORM(xscvspdp, 0x12, 0x14, PPC2_VSX),
208GEN_XX2FORM(xscvspdpn, 0x16, 0x14, PPC2_VSX207),
209GEN_XX2FORM(xscvdpsxds, 0x10, 0x15, PPC2_VSX),
210GEN_XX2FORM(xscvdpsxws, 0x10, 0x05, PPC2_VSX),
211GEN_XX2FORM(xscvdpuxds, 0x10, 0x14, PPC2_VSX),
212GEN_XX2FORM(xscvdpuxws, 0x10, 0x04, PPC2_VSX),
213GEN_XX2FORM(xscvsxddp, 0x10, 0x17, PPC2_VSX),
48ef23cb 214GEN_VSX_XFORM_300_EO(xscvudqp, 0x04, 0x1A, 0x02, 0x00000001),
3014427a
BH
215GEN_XX2FORM(xscvuxddp, 0x10, 0x16, PPC2_VSX),
216GEN_XX2FORM(xsrdpi, 0x12, 0x04, PPC2_VSX),
217GEN_XX2FORM(xsrdpic, 0x16, 0x06, PPC2_VSX),
218GEN_XX2FORM(xsrdpim, 0x12, 0x07, PPC2_VSX),
219GEN_XX2FORM(xsrdpip, 0x12, 0x06, PPC2_VSX),
220GEN_XX2FORM(xsrdpiz, 0x12, 0x05, PPC2_VSX),
221
222GEN_XX3FORM(xsaddsp, 0x00, 0x00, PPC2_VSX207),
223GEN_XX3FORM(xssubsp, 0x00, 0x01, PPC2_VSX207),
224GEN_XX3FORM(xsmulsp, 0x00, 0x02, PPC2_VSX207),
225GEN_XX3FORM(xsdivsp, 0x00, 0x03, PPC2_VSX207),
314c1163 226GEN_VSX_XFORM_300(xsdivqp, 0x04, 0x11, 0x0),
3014427a
BH
227GEN_XX2FORM(xsresp, 0x14, 0x01, PPC2_VSX207),
228GEN_XX2FORM(xsrsp, 0x12, 0x11, PPC2_VSX207),
229GEN_XX2FORM(xssqrtsp, 0x16, 0x00, PPC2_VSX207),
230GEN_XX2FORM(xsrsqrtesp, 0x14, 0x00, PPC2_VSX207),
231GEN_XX3FORM(xsmaddasp, 0x04, 0x00, PPC2_VSX207),
232GEN_XX3FORM(xsmaddmsp, 0x04, 0x01, PPC2_VSX207),
233GEN_XX3FORM(xsmsubasp, 0x04, 0x02, PPC2_VSX207),
234GEN_XX3FORM(xsmsubmsp, 0x04, 0x03, PPC2_VSX207),
235GEN_XX3FORM(xsnmaddasp, 0x04, 0x10, PPC2_VSX207),
236GEN_XX3FORM(xsnmaddmsp, 0x04, 0x11, PPC2_VSX207),
237GEN_XX3FORM(xsnmsubasp, 0x04, 0x12, PPC2_VSX207),
238GEN_XX3FORM(xsnmsubmsp, 0x04, 0x13, PPC2_VSX207),
239GEN_XX2FORM(xscvsxdsp, 0x10, 0x13, PPC2_VSX207),
240GEN_XX2FORM(xscvuxdsp, 0x10, 0x12, PPC2_VSX207),
241
242GEN_XX3FORM(xvadddp, 0x00, 0x0C, PPC2_VSX),
243GEN_XX3FORM(xvsubdp, 0x00, 0x0D, PPC2_VSX),
244GEN_XX3FORM(xvmuldp, 0x00, 0x0E, PPC2_VSX),
245GEN_XX3FORM(xvdivdp, 0x00, 0x0F, PPC2_VSX),
246GEN_XX2FORM(xvredp, 0x14, 0x0D, PPC2_VSX),
247GEN_XX2FORM(xvsqrtdp, 0x16, 0x0C, PPC2_VSX),
248GEN_XX2FORM(xvrsqrtedp, 0x14, 0x0C, PPC2_VSX),
249GEN_XX3FORM(xvtdivdp, 0x14, 0x0F, PPC2_VSX),
250GEN_XX2FORM(xvtsqrtdp, 0x14, 0x0E, PPC2_VSX),
251GEN_XX3FORM(xvmaddadp, 0x04, 0x0C, PPC2_VSX),
252GEN_XX3FORM(xvmaddmdp, 0x04, 0x0D, PPC2_VSX),
253GEN_XX3FORM(xvmsubadp, 0x04, 0x0E, PPC2_VSX),
254GEN_XX3FORM(xvmsubmdp, 0x04, 0x0F, PPC2_VSX),
255GEN_XX3FORM(xvnmaddadp, 0x04, 0x1C, PPC2_VSX),
256GEN_XX3FORM(xvnmaddmdp, 0x04, 0x1D, PPC2_VSX),
257GEN_XX3FORM(xvnmsubadp, 0x04, 0x1E, PPC2_VSX),
258GEN_XX3FORM(xvnmsubmdp, 0x04, 0x1F, PPC2_VSX),
259GEN_XX3FORM(xvmaxdp, 0x00, 0x1C, PPC2_VSX),
260GEN_XX3FORM(xvmindp, 0x00, 0x1D, PPC2_VSX),
261GEN_XX3_RC_FORM(xvcmpeqdp, 0x0C, 0x0C, PPC2_VSX),
262GEN_XX3_RC_FORM(xvcmpgtdp, 0x0C, 0x0D, PPC2_VSX),
263GEN_XX3_RC_FORM(xvcmpgedp, 0x0C, 0x0E, PPC2_VSX),
6db246f9 264GEN_XX3_RC_FORM(xvcmpnedp, 0x0C, 0x0F, PPC2_ISA300),
3014427a
BH
265GEN_XX2FORM(xvcvdpsp, 0x12, 0x18, PPC2_VSX),
266GEN_XX2FORM(xvcvdpsxds, 0x10, 0x1D, PPC2_VSX),
267GEN_XX2FORM(xvcvdpsxws, 0x10, 0x0D, PPC2_VSX),
268GEN_XX2FORM(xvcvdpuxds, 0x10, 0x1C, PPC2_VSX),
269GEN_XX2FORM(xvcvdpuxws, 0x10, 0x0C, PPC2_VSX),
270GEN_XX2FORM(xvcvsxddp, 0x10, 0x1F, PPC2_VSX),
271GEN_XX2FORM(xvcvuxddp, 0x10, 0x1E, PPC2_VSX),
272GEN_XX2FORM(xvcvsxwdp, 0x10, 0x0F, PPC2_VSX),
273GEN_XX2FORM(xvcvuxwdp, 0x10, 0x0E, PPC2_VSX),
274GEN_XX2FORM(xvrdpi, 0x12, 0x0C, PPC2_VSX),
275GEN_XX2FORM(xvrdpic, 0x16, 0x0E, PPC2_VSX),
276GEN_XX2FORM(xvrdpim, 0x12, 0x0F, PPC2_VSX),
277GEN_XX2FORM(xvrdpip, 0x12, 0x0E, PPC2_VSX),
278GEN_XX2FORM(xvrdpiz, 0x12, 0x0D, PPC2_VSX),
279
280GEN_XX3FORM(xvaddsp, 0x00, 0x08, PPC2_VSX),
281GEN_XX3FORM(xvsubsp, 0x00, 0x09, PPC2_VSX),
282GEN_XX3FORM(xvmulsp, 0x00, 0x0A, PPC2_VSX),
283GEN_XX3FORM(xvdivsp, 0x00, 0x0B, PPC2_VSX),
284GEN_XX2FORM(xvresp, 0x14, 0x09, PPC2_VSX),
285GEN_XX2FORM(xvsqrtsp, 0x16, 0x08, PPC2_VSX),
286GEN_XX2FORM(xvrsqrtesp, 0x14, 0x08, PPC2_VSX),
287GEN_XX3FORM(xvtdivsp, 0x14, 0x0B, PPC2_VSX),
288GEN_XX2FORM(xvtsqrtsp, 0x14, 0x0A, PPC2_VSX),
289GEN_XX3FORM(xvmaddasp, 0x04, 0x08, PPC2_VSX),
290GEN_XX3FORM(xvmaddmsp, 0x04, 0x09, PPC2_VSX),
291GEN_XX3FORM(xvmsubasp, 0x04, 0x0A, PPC2_VSX),
292GEN_XX3FORM(xvmsubmsp, 0x04, 0x0B, PPC2_VSX),
293GEN_XX3FORM(xvnmaddasp, 0x04, 0x18, PPC2_VSX),
294GEN_XX3FORM(xvnmaddmsp, 0x04, 0x19, PPC2_VSX),
295GEN_XX3FORM(xvnmsubasp, 0x04, 0x1A, PPC2_VSX),
296GEN_XX3FORM(xvnmsubmsp, 0x04, 0x1B, PPC2_VSX),
297GEN_XX3FORM(xvmaxsp, 0x00, 0x18, PPC2_VSX),
298GEN_XX3FORM(xvminsp, 0x00, 0x19, PPC2_VSX),
299GEN_XX3_RC_FORM(xvcmpeqsp, 0x0C, 0x08, PPC2_VSX),
300GEN_XX3_RC_FORM(xvcmpgtsp, 0x0C, 0x09, PPC2_VSX),
301GEN_XX3_RC_FORM(xvcmpgesp, 0x0C, 0x0A, PPC2_VSX),
6db246f9 302GEN_XX3_RC_FORM(xvcmpnesp, 0x0C, 0x0B, PPC2_ISA300),
3014427a
BH
303GEN_XX2FORM(xvcvspdp, 0x12, 0x1C, PPC2_VSX),
304GEN_XX2FORM(xvcvspsxds, 0x10, 0x19, PPC2_VSX),
305GEN_XX2FORM(xvcvspsxws, 0x10, 0x09, PPC2_VSX),
306GEN_XX2FORM(xvcvspuxds, 0x10, 0x18, PPC2_VSX),
307GEN_XX2FORM(xvcvspuxws, 0x10, 0x08, PPC2_VSX),
308GEN_XX2FORM(xvcvsxdsp, 0x10, 0x1B, PPC2_VSX),
309GEN_XX2FORM(xvcvuxdsp, 0x10, 0x1A, PPC2_VSX),
310GEN_XX2FORM(xvcvsxwsp, 0x10, 0x0B, PPC2_VSX),
311GEN_XX2FORM(xvcvuxwsp, 0x10, 0x0A, PPC2_VSX),
312GEN_XX2FORM(xvrspi, 0x12, 0x08, PPC2_VSX),
313GEN_XX2FORM(xvrspic, 0x16, 0x0A, PPC2_VSX),
314GEN_XX2FORM(xvrspim, 0x12, 0x0B, PPC2_VSX),
315GEN_XX2FORM(xvrspip, 0x12, 0x0A, PPC2_VSX),
316GEN_XX2FORM(xvrspiz, 0x12, 0x09, PPC2_VSX),
14fd8ab2
ND
317GEN_XX2FORM_EO(xxbrh, 0x16, 0x1D, 0x07, PPC2_ISA300),
318GEN_XX2FORM_EO(xxbrw, 0x16, 0x1D, 0x0F, PPC2_ISA300),
319GEN_XX2FORM_EO(xxbrd, 0x16, 0x1D, 0x17, PPC2_ISA300),
8b920d8a
ND
320GEN_XX2FORM_EO(xvcvhpsp, 0x16, 0x1D, 0x18, PPC2_ISA300),
321GEN_XX2FORM_EO(xvcvsphp, 0x16, 0x1D, 0x19, PPC2_ISA300),
14fd8ab2 322GEN_XX2FORM_EO(xxbrq, 0x16, 0x1D, 0x1F, PPC2_ISA300),
3014427a
BH
323
324#define VSX_LOGICAL(name, opc2, opc3, fl2) \
325GEN_XX3FORM(name, opc2, opc3, fl2)
326
327VSX_LOGICAL(xxland, 0x8, 0x10, PPC2_VSX),
328VSX_LOGICAL(xxlandc, 0x8, 0x11, PPC2_VSX),
329VSX_LOGICAL(xxlor, 0x8, 0x12, PPC2_VSX),
330VSX_LOGICAL(xxlxor, 0x8, 0x13, PPC2_VSX),
331VSX_LOGICAL(xxlnor, 0x8, 0x14, PPC2_VSX),
332VSX_LOGICAL(xxleqv, 0x8, 0x17, PPC2_VSX207),
333VSX_LOGICAL(xxlnand, 0x8, 0x16, PPC2_VSX207),
334VSX_LOGICAL(xxlorc, 0x8, 0x15, PPC2_VSX207),
335GEN_XX3FORM(xxmrghw, 0x08, 0x02, PPC2_VSX),
336GEN_XX3FORM(xxmrglw, 0x08, 0x06, PPC2_VSX),
234068ab
BR
337GEN_XX3FORM(xxperm, 0x08, 0x03, PPC2_ISA300),
338GEN_XX3FORM(xxpermr, 0x08, 0x07, PPC2_ISA300),
3014427a 339GEN_XX2FORM(xxspltw, 0x08, 0x0A, PPC2_VSX),
f1132835 340GEN_XX1FORM(xxspltib, 0x08, 0x0B, PPC2_ISA300),
3014427a 341GEN_XX3FORM_DM(xxsldwi, 0x08, 0x00),
8ad901e5 342GEN_XX2FORM_EXT(xxextractuw, 0x0A, 0x0A, PPC2_ISA300),
3398b742 343GEN_XX2FORM_EXT(xxinsertw, 0x0A, 0x0B, PPC2_ISA300),
3014427a
BH
344
345#define GEN_XXSEL_ROW(opc3) \
346GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x18, opc3, 0, PPC_NONE, PPC2_VSX), \
347GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x19, opc3, 0, PPC_NONE, PPC2_VSX), \
348GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1A, opc3, 0, PPC_NONE, PPC2_VSX), \
349GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1B, opc3, 0, PPC_NONE, PPC2_VSX), \
350GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1C, opc3, 0, PPC_NONE, PPC2_VSX), \
351GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1D, opc3, 0, PPC_NONE, PPC2_VSX), \
352GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1E, opc3, 0, PPC_NONE, PPC2_VSX), \
353GEN_HANDLER2_E(xxsel, "xxsel", 0x3C, 0x1F, opc3, 0, PPC_NONE, PPC2_VSX), \
354
355GEN_XXSEL_ROW(0x00)
356GEN_XXSEL_ROW(0x01)
357GEN_XXSEL_ROW(0x02)
358GEN_XXSEL_ROW(0x03)
359GEN_XXSEL_ROW(0x04)
360GEN_XXSEL_ROW(0x05)
361GEN_XXSEL_ROW(0x06)
362GEN_XXSEL_ROW(0x07)
363GEN_XXSEL_ROW(0x08)
364GEN_XXSEL_ROW(0x09)
365GEN_XXSEL_ROW(0x0A)
366GEN_XXSEL_ROW(0x0B)
367GEN_XXSEL_ROW(0x0C)
368GEN_XXSEL_ROW(0x0D)
369GEN_XXSEL_ROW(0x0E)
370GEN_XXSEL_ROW(0x0F)
371GEN_XXSEL_ROW(0x10)
372GEN_XXSEL_ROW(0x11)
373GEN_XXSEL_ROW(0x12)
374GEN_XXSEL_ROW(0x13)
375GEN_XXSEL_ROW(0x14)
376GEN_XXSEL_ROW(0x15)
377GEN_XXSEL_ROW(0x16)
378GEN_XXSEL_ROW(0x17)
379GEN_XXSEL_ROW(0x18)
380GEN_XXSEL_ROW(0x19)
381GEN_XXSEL_ROW(0x1A)
382GEN_XXSEL_ROW(0x1B)
383GEN_XXSEL_ROW(0x1C)
384GEN_XXSEL_ROW(0x1D)
385GEN_XXSEL_ROW(0x1E)
386GEN_XXSEL_ROW(0x1F)
387
388GEN_XX3FORM_DM(xxpermdi, 0x08, 0x01),