cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

vsx-ops.c.inc (19871B)


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