xref: /qemu/target/ppc/translate/spe-ops.c.inc (revision 139c1837)
1*139c1837SPaolo BonziniGEN_HANDLER2(evsel0, "evsel", 0x04, 0x1c, 0x09, 0x00000000, PPC_SPE),
2*139c1837SPaolo BonziniGEN_HANDLER2(evsel1, "evsel", 0x04, 0x1d, 0x09, 0x00000000, PPC_SPE),
3*139c1837SPaolo BonziniGEN_HANDLER2(evsel2, "evsel", 0x04, 0x1e, 0x09, 0x00000000, PPC_SPE),
4*139c1837SPaolo BonziniGEN_HANDLER2(evsel3, "evsel", 0x04, 0x1f, 0x09, 0x00000000, PPC_SPE),
5*139c1837SPaolo Bonzini
6*139c1837SPaolo Bonzini#define GEN_SPE(name0, name1, opc2, opc3, inval0, inval1, type) \
7*139c1837SPaolo Bonzini    GEN_OPCODE_DUAL(name0##_##name1, 0x04, opc2, opc3, inval0, inval1, type, PPC_NONE)
8*139c1837SPaolo BonziniGEN_SPE(evaddw,      speundef,    0x00, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
9*139c1837SPaolo BonziniGEN_SPE(evaddiw,     speundef,    0x01, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
10*139c1837SPaolo BonziniGEN_SPE(evsubfw,     speundef,    0x02, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
11*139c1837SPaolo BonziniGEN_SPE(evsubifw,    speundef,    0x03, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
12*139c1837SPaolo BonziniGEN_SPE(evabs,       evneg,       0x04, 0x08, 0x0000F800, 0x0000F800, PPC_SPE),
13*139c1837SPaolo BonziniGEN_SPE(evextsb,     evextsh,     0x05, 0x08, 0x0000F800, 0x0000F800, PPC_SPE),
14*139c1837SPaolo BonziniGEN_SPE(evrndw,      evcntlzw,    0x06, 0x08, 0x0000F800, 0x0000F800, PPC_SPE),
15*139c1837SPaolo BonziniGEN_SPE(evcntlsw,    brinc,       0x07, 0x08, 0x0000F800, 0x00000000, PPC_SPE),
16*139c1837SPaolo BonziniGEN_SPE(evmra,       speundef,    0x02, 0x13, 0x0000F800, 0xFFFFFFFF, PPC_SPE),
17*139c1837SPaolo BonziniGEN_SPE(speundef,    evand,       0x08, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE),
18*139c1837SPaolo BonziniGEN_SPE(evandc,      speundef,    0x09, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
19*139c1837SPaolo BonziniGEN_SPE(evxor,       evor,        0x0B, 0x08, 0x00000000, 0x00000000, PPC_SPE),
20*139c1837SPaolo BonziniGEN_SPE(evnor,       eveqv,       0x0C, 0x08, 0x00000000, 0x00000000, PPC_SPE),
21*139c1837SPaolo BonziniGEN_SPE(evmwumi,     evmwsmi,     0x0C, 0x11, 0x00000000, 0x00000000, PPC_SPE),
22*139c1837SPaolo BonziniGEN_SPE(evmwumia,    evmwsmia,    0x1C, 0x11, 0x00000000, 0x00000000, PPC_SPE),
23*139c1837SPaolo BonziniGEN_SPE(evmwumiaa,   evmwsmiaa,   0x0C, 0x15, 0x00000000, 0x00000000, PPC_SPE),
24*139c1837SPaolo BonziniGEN_SPE(speundef,    evorc,       0x0D, 0x08, 0xFFFFFFFF, 0x00000000, PPC_SPE),
25*139c1837SPaolo BonziniGEN_SPE(evnand,      speundef,    0x0F, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
26*139c1837SPaolo BonziniGEN_SPE(evsrwu,      evsrws,      0x10, 0x08, 0x00000000, 0x00000000, PPC_SPE),
27*139c1837SPaolo BonziniGEN_SPE(evsrwiu,     evsrwis,     0x11, 0x08, 0x00000000, 0x00000000, PPC_SPE),
28*139c1837SPaolo BonziniGEN_SPE(evslw,       speundef,    0x12, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
29*139c1837SPaolo BonziniGEN_SPE(evslwi,      speundef,    0x13, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE),
30*139c1837SPaolo BonziniGEN_SPE(evrlw,       evsplati,    0x14, 0x08, 0x00000000, 0x0000F800, PPC_SPE),
31*139c1837SPaolo BonziniGEN_SPE(evrlwi,      evsplatfi,   0x15, 0x08, 0x00000000, 0x0000F800, PPC_SPE),
32*139c1837SPaolo BonziniGEN_SPE(evmergehi,   evmergelo,   0x16, 0x08, 0x00000000, 0x00000000, PPC_SPE),
33*139c1837SPaolo BonziniGEN_SPE(evmergehilo, evmergelohi, 0x17, 0x08, 0x00000000, 0x00000000, PPC_SPE),
34*139c1837SPaolo BonziniGEN_SPE(evcmpgtu,    evcmpgts,    0x18, 0x08, 0x00600000, 0x00600000, PPC_SPE),
35*139c1837SPaolo BonziniGEN_SPE(evcmpltu,    evcmplts,    0x19, 0x08, 0x00600000, 0x00600000, PPC_SPE),
36*139c1837SPaolo BonziniGEN_SPE(evcmpeq,     speundef,    0x1A, 0x08, 0x00600000, 0xFFFFFFFF, PPC_SPE),
37*139c1837SPaolo Bonzini
38*139c1837SPaolo BonziniGEN_SPE(evfsadd,     evfssub,     0x00, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE),
39*139c1837SPaolo BonziniGEN_SPE(evfsabs,     evfsnabs,    0x02, 0x0A, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE),
40*139c1837SPaolo BonziniGEN_SPE(evfsneg,     speundef,    0x03, 0x0A, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE),
41*139c1837SPaolo BonziniGEN_SPE(evfsmul,     evfsdiv,     0x04, 0x0A, 0x00000000, 0x00000000, PPC_SPE_SINGLE),
42*139c1837SPaolo BonziniGEN_SPE(evfscmpgt,   evfscmplt,   0x06, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE),
43*139c1837SPaolo BonziniGEN_SPE(evfscmpeq,   speundef,    0x07, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE),
44*139c1837SPaolo BonziniGEN_SPE(evfscfui,    evfscfsi,    0x08, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
45*139c1837SPaolo BonziniGEN_SPE(evfscfuf,    evfscfsf,    0x09, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
46*139c1837SPaolo BonziniGEN_SPE(evfsctui,    evfsctsi,    0x0A, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
47*139c1837SPaolo BonziniGEN_SPE(evfsctuf,    evfsctsf,    0x0B, 0x0A, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
48*139c1837SPaolo BonziniGEN_SPE(evfsctuiz,   speundef,    0x0C, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE),
49*139c1837SPaolo BonziniGEN_SPE(evfsctsiz,   speundef,    0x0D, 0x0A, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE),
50*139c1837SPaolo BonziniGEN_SPE(evfststgt,   evfststlt,   0x0E, 0x0A, 0x00600000, 0x00600000, PPC_SPE_SINGLE),
51*139c1837SPaolo BonziniGEN_SPE(evfststeq,   speundef,    0x0F, 0x0A, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE),
52*139c1837SPaolo Bonzini
53*139c1837SPaolo BonziniGEN_SPE(efsadd,      efssub,      0x00, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE),
54*139c1837SPaolo BonziniGEN_SPE(efsabs,      efsnabs,     0x02, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_SINGLE),
55*139c1837SPaolo BonziniGEN_SPE(efsneg,      speundef,    0x03, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_SINGLE),
56*139c1837SPaolo BonziniGEN_SPE(efsmul,      efsdiv,      0x04, 0x0B, 0x00000000, 0x00000000, PPC_SPE_SINGLE),
57*139c1837SPaolo BonziniGEN_SPE(efscmpgt,    efscmplt,    0x06, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE),
58*139c1837SPaolo BonziniGEN_SPE(efscmpeq,    efscfd,      0x07, 0x0B, 0x00600000, 0x00180000, PPC_SPE_SINGLE),
59*139c1837SPaolo BonziniGEN_SPE(efscfui,     efscfsi,     0x08, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
60*139c1837SPaolo BonziniGEN_SPE(efscfuf,     efscfsf,     0x09, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
61*139c1837SPaolo BonziniGEN_SPE(efsctui,     efsctsi,     0x0A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
62*139c1837SPaolo BonziniGEN_SPE(efsctuf,     efsctsf,     0x0B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_SINGLE),
63*139c1837SPaolo BonziniGEN_SPE(efsctuiz,    speundef,    0x0C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE),
64*139c1837SPaolo BonziniGEN_SPE(efsctsiz,    speundef,    0x0D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_SINGLE),
65*139c1837SPaolo BonziniGEN_SPE(efststgt,    efststlt,    0x0E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_SINGLE),
66*139c1837SPaolo BonziniGEN_SPE(efststeq,    speundef,    0x0F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_SINGLE),
67*139c1837SPaolo Bonzini
68*139c1837SPaolo BonziniGEN_SPE(efdadd,      efdsub,      0x10, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE),
69*139c1837SPaolo BonziniGEN_SPE(efdcfuid,    efdcfsid,    0x11, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
70*139c1837SPaolo BonziniGEN_SPE(efdabs,      efdnabs,     0x12, 0x0B, 0x0000F800, 0x0000F800, PPC_SPE_DOUBLE),
71*139c1837SPaolo BonziniGEN_SPE(efdneg,      speundef,    0x13, 0x0B, 0x0000F800, 0xFFFFFFFF, PPC_SPE_DOUBLE),
72*139c1837SPaolo BonziniGEN_SPE(efdmul,      efddiv,      0x14, 0x0B, 0x00000000, 0x00000000, PPC_SPE_DOUBLE),
73*139c1837SPaolo BonziniGEN_SPE(efdctuidz,   efdctsidz,   0x15, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
74*139c1837SPaolo BonziniGEN_SPE(efdcmpgt,    efdcmplt,    0x16, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE),
75*139c1837SPaolo BonziniGEN_SPE(efdcmpeq,    efdcfs,      0x17, 0x0B, 0x00600000, 0x00180000, PPC_SPE_DOUBLE),
76*139c1837SPaolo BonziniGEN_SPE(efdcfui,     efdcfsi,     0x18, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
77*139c1837SPaolo BonziniGEN_SPE(efdcfuf,     efdcfsf,     0x19, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
78*139c1837SPaolo BonziniGEN_SPE(efdctui,     efdctsi,     0x1A, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
79*139c1837SPaolo BonziniGEN_SPE(efdctuf,     efdctsf,     0x1B, 0x0B, 0x00180000, 0x00180000, PPC_SPE_DOUBLE),
80*139c1837SPaolo BonziniGEN_SPE(efdctuiz,    speundef,    0x1C, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE),
81*139c1837SPaolo BonziniGEN_SPE(efdctsiz,    speundef,    0x1D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE),
82*139c1837SPaolo BonziniGEN_SPE(efdtstgt,    efdtstlt,    0x1E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE),
83*139c1837SPaolo BonziniGEN_SPE(efdtsteq,    speundef,    0x1F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_DOUBLE),
84*139c1837SPaolo Bonzini
85*139c1837SPaolo Bonzini#define GEN_SPEOP_LDST(name, opc2, sh)                                        \
86*139c1837SPaolo BonziniGEN_HANDLER(name, 0x04, opc2, 0x0C, 0x00000000, PPC_SPE)
87*139c1837SPaolo BonziniGEN_SPEOP_LDST(evldd, 0x00, 3),
88*139c1837SPaolo BonziniGEN_SPEOP_LDST(evldw, 0x01, 3),
89*139c1837SPaolo BonziniGEN_SPEOP_LDST(evldh, 0x02, 3),
90*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlhhesplat, 0x04, 1),
91*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlhhousplat, 0x06, 1),
92*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlhhossplat, 0x07, 1),
93*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlwhe, 0x08, 2),
94*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlwhou, 0x0A, 2),
95*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlwhos, 0x0B, 2),
96*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlwwsplat, 0x0C, 2),
97*139c1837SPaolo BonziniGEN_SPEOP_LDST(evlwhsplat, 0x0E, 2),
98*139c1837SPaolo Bonzini
99*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstdd, 0x10, 3),
100*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstdw, 0x11, 3),
101*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstdh, 0x12, 3),
102*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstwhe, 0x18, 2),
103*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstwho, 0x1A, 2),
104*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstwwe, 0x1C, 2),
105*139c1837SPaolo BonziniGEN_SPEOP_LDST(evstwwo, 0x1E, 2),
106