Revision 5335a145

b/target-ppc/helper.h
169 169
DEF_HELPER_4(vmsummbm, void, avr, avr, avr, avr)
170 170
DEF_HELPER_4(vsel, void, avr, avr, avr, avr)
171 171
DEF_HELPER_4(vperm, void, avr, avr, avr, avr)
172
DEF_HELPER_3(vpkshss, void, avr, avr, avr)
173
DEF_HELPER_3(vpkshus, void, avr, avr, avr)
174
DEF_HELPER_3(vpkswss, void, avr, avr, avr)
175
DEF_HELPER_3(vpkswus, void, avr, avr, avr)
176
DEF_HELPER_3(vpkuhus, void, avr, avr, avr)
177
DEF_HELPER_3(vpkuwus, void, avr, avr, avr)
178
DEF_HELPER_3(vpkuhum, void, avr, avr, avr)
179
DEF_HELPER_3(vpkuwum, void, avr, avr, avr)
172 180

  
173 181
DEF_HELPER_1(efscfsi, i32, i32)
174 182
DEF_HELPER_1(efscfui, i32, i32)
b/target-ppc/op_helper.c
2190 2190
    *r = result;
2191 2191
}
2192 2192

  
2193
#if defined(WORDS_BIGENDIAN)
2194
#define PKBIG 1
2195
#else
2196
#define PKBIG 0
2197
#endif
2198
#define VPK(suffix, from, to, cvt, dosat)       \
2199
    void helper_vpk##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)  \
2200
    {                                                                   \
2201
        int i;                                                          \
2202
        int sat = 0;                                                    \
2203
        ppc_avr_t result;                                               \
2204
        ppc_avr_t *a0 = PKBIG ? a : b;                                  \
2205
        ppc_avr_t *a1 = PKBIG ? b : a;                                  \
2206
        VECTOR_FOR_INORDER_I (i, from) {                                \
2207
            result.to[i] = cvt(a0->from[i], &sat);                      \
2208
            result.to[i+ARRAY_SIZE(r->from)] = cvt(a1->from[i], &sat);  \
2209
        }                                                               \
2210
        *r = result;                                                    \
2211
        if (dosat && sat) {                                             \
2212
            env->vscr |= (1 << VSCR_SAT);                               \
2213
        }                                                               \
2214
    }
2215
#define I(x, y) (x)
2216
VPK(shss, s16, s8, cvtshsb, 1)
2217
VPK(shus, s16, u8, cvtshub, 1)
2218
VPK(swss, s32, s16, cvtswsh, 1)
2219
VPK(swus, s32, u16, cvtswuh, 1)
2220
VPK(uhus, u16, u8, cvtuhub, 1)
2221
VPK(uwus, u32, u16, cvtuwuh, 1)
2222
VPK(uhum, u16, u8, I, 0)
2223
VPK(uwum, u32, u16, I, 0)
2224
#undef I
2225
#undef VPK
2226
#undef PKBIG
2227

  
2193 2228
#define VROTATE(suffix, element)                                        \
2194 2229
    void helper_vrl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)  \
2195 2230
    {                                                                   \
b/target-ppc/translate.c
6273 6273
GEN_VXFORM(vrlb, 2, 0);
6274 6274
GEN_VXFORM(vrlh, 2, 1);
6275 6275
GEN_VXFORM(vrlw, 2, 2);
6276
GEN_VXFORM(vpkuhum, 7, 0);
6277
GEN_VXFORM(vpkuwum, 7, 1);
6278
GEN_VXFORM(vpkuhus, 7, 2);
6279
GEN_VXFORM(vpkuwus, 7, 3);
6280
GEN_VXFORM(vpkshus, 7, 4);
6281
GEN_VXFORM(vpkswus, 7, 5);
6282
GEN_VXFORM(vpkshss, 7, 6);
6283
GEN_VXFORM(vpkswss, 7, 7);
6276 6284

  
6277 6285
#define GEN_VXFORM_NOA(name, opc2, opc3)                                \
6278 6286
    GEN_HANDLER(name, 0x04, opc2, opc3, 0x001f0000, PPC_ALTIVEC)        \

Also available in: Unified diff