Revision 3b430048

b/target-ppc/helper.h
123 123
DEF_HELPER_3(vmaxub, void, avr, avr, avr)
124 124
DEF_HELPER_3(vmaxuh, void, avr, avr, avr)
125 125
DEF_HELPER_3(vmaxuw, void, avr, avr, avr)
126
DEF_HELPER_3(vmrglb, void, avr, avr, avr)
127
DEF_HELPER_3(vmrglh, void, avr, avr, avr)
128
DEF_HELPER_3(vmrglw, void, avr, avr, avr)
129
DEF_HELPER_3(vmrghb, void, avr, avr, avr)
130
DEF_HELPER_3(vmrghh, void, avr, avr, avr)
131
DEF_HELPER_3(vmrghw, void, avr, avr, avr)
126 132

  
127 133
DEF_HELPER_1(efscfsi, i32, i32)
128 134
DEF_HELPER_1(efscfui, i32, i32)
b/target-ppc/op_helper.c
2031 2031
#undef VMINMAX_DO
2032 2032
#undef VMINMAX
2033 2033

  
2034
#define VMRG_DO(name, element, highp)                                   \
2035
    void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)      \
2036
    {                                                                   \
2037
        ppc_avr_t result;                                               \
2038
        int i;                                                          \
2039
        size_t n_elems = ARRAY_SIZE(r->element);                        \
2040
        for (i = 0; i < n_elems/2; i++) {                               \
2041
            if (highp) {                                                \
2042
                result.element[i*2+HI_IDX] = a->element[i];             \
2043
                result.element[i*2+LO_IDX] = b->element[i];             \
2044
            } else {                                                    \
2045
                result.element[n_elems - i*2 - (1+HI_IDX)] = b->element[n_elems - i - 1]; \
2046
                result.element[n_elems - i*2 - (1+LO_IDX)] = a->element[n_elems - i - 1]; \
2047
            }                                                           \
2048
        }                                                               \
2049
        *r = result;                                                    \
2050
    }
2051
#if defined(WORDS_BIGENDIAN)
2052
#define MRGHI 0
2053
#define MRGL0 1
2054
#else
2055
#define MRGHI 1
2056
#define MRGLO 0
2057
#endif
2058
#define VMRG(suffix, element)                   \
2059
  VMRG_DO(mrgl##suffix, element, MRGHI)         \
2060
  VMRG_DO(mrgh##suffix, element, MRGLO)
2061
VMRG(b, u8)
2062
VMRG(h, u16)
2063
VMRG(w, u32)
2064
#undef VMRG_DO
2065
#undef VMRG
2066
#undef MRGHI
2067
#undef MRGLO
2068

  
2034 2069
#undef VECTOR_FOR_INORDER_I
2035 2070
#undef HI_IDX
2036 2071
#undef LO_IDX
b/target-ppc/translate.c
6205 6205
GEN_VXFORM(vavgsb, 1, 20);
6206 6206
GEN_VXFORM(vavgsh, 1, 21);
6207 6207
GEN_VXFORM(vavgsw, 1, 22);
6208
GEN_VXFORM(vmrghb, 6, 0);
6209
GEN_VXFORM(vmrghh, 6, 1);
6210
GEN_VXFORM(vmrghw, 6, 2);
6211
GEN_VXFORM(vmrglb, 6, 4);
6212
GEN_VXFORM(vmrglh, 6, 5);
6213
GEN_VXFORM(vmrglw, 6, 6);
6208 6214

  
6209 6215
/***                           SPE extension                               ***/
6210 6216
/* Register moves */

Also available in: Unified diff