Revision 1add6e23

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(vcmpequb, void, avr, avr, avr)
127
DEF_HELPER_3(vcmpequh, void, avr, avr, avr)
128
DEF_HELPER_3(vcmpequw, void, avr, avr, avr)
129
DEF_HELPER_3(vcmpgtub, void, avr, avr, avr)
130
DEF_HELPER_3(vcmpgtuh, void, avr, avr, avr)
131
DEF_HELPER_3(vcmpgtuw, void, avr, avr, avr)
132
DEF_HELPER_3(vcmpgtsb, void, avr, avr, avr)
133
DEF_HELPER_3(vcmpgtsh, void, avr, avr, avr)
134
DEF_HELPER_3(vcmpgtsw, void, avr, avr, avr)
135
DEF_HELPER_3(vcmpequb_dot, void, avr, avr, avr)
136
DEF_HELPER_3(vcmpequh_dot, void, avr, avr, avr)
137
DEF_HELPER_3(vcmpequw_dot, void, avr, avr, avr)
138
DEF_HELPER_3(vcmpgtub_dot, void, avr, avr, avr)
139
DEF_HELPER_3(vcmpgtuh_dot, void, avr, avr, avr)
140
DEF_HELPER_3(vcmpgtuw_dot, void, avr, avr, avr)
141
DEF_HELPER_3(vcmpgtsb_dot, void, avr, avr, avr)
142
DEF_HELPER_3(vcmpgtsh_dot, void, avr, avr, avr)
143
DEF_HELPER_3(vcmpgtsw_dot, void, avr, avr, avr)
126 144
DEF_HELPER_3(vmrglb, void, avr, avr, avr)
127 145
DEF_HELPER_3(vmrglh, void, avr, avr, avr)
128 146
DEF_HELPER_3(vmrglw, void, avr, avr, avr)
b/target-ppc/op_helper.c
2101 2101
#undef VAVG_DO
2102 2102
#undef VAVG
2103 2103

  
2104
#define VCMP_DO(suffix, compare, element, record)                       \
2105
    void helper_vcmp##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
2106
    {                                                                   \
2107
        uint32_t ones = (uint32_t)-1;                                   \
2108
        uint32_t all = ones;                                            \
2109
        uint32_t none = 0;                                              \
2110
        int i;                                                          \
2111
        for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
2112
            uint32_t result = (a->element[i] compare b->element[i] ? ones : 0x0); \
2113
            switch (sizeof (a->element[0])) {                           \
2114
            case 4: r->u32[i] = result; break;                          \
2115
            case 2: r->u16[i] = result; break;                          \
2116
            case 1: r->u8[i] = result; break;                           \
2117
            }                                                           \
2118
            all &= result;                                              \
2119
            none |= result;                                             \
2120
        }                                                               \
2121
        if (record) {                                                   \
2122
            env->crf[6] = ((all != 0) << 3) | ((none == 0) << 1);       \
2123
        }                                                               \
2124
    }
2125
#define VCMP(suffix, compare, element)          \
2126
    VCMP_DO(suffix, compare, element, 0)        \
2127
    VCMP_DO(suffix##_dot, compare, element, 1)
2128
VCMP(equb, ==, u8)
2129
VCMP(equh, ==, u16)
2130
VCMP(equw, ==, u32)
2131
VCMP(gtub, >, u8)
2132
VCMP(gtuh, >, u16)
2133
VCMP(gtuw, >, u32)
2134
VCMP(gtsb, >, s8)
2135
VCMP(gtsh, >, s16)
2136
VCMP(gtsw, >, s32)
2137
#undef VCMP_DO
2138
#undef VCMP
2139

  
2104 2140
void helper_vmhaddshs (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
2105 2141
{
2106 2142
    int sat = 0;
b/target-ppc/translate.c
6380 6380
    GEN_VXRFORM1(name, name, #name, opc2, opc3)                      \
6381 6381
    GEN_VXRFORM1(name##_dot, name##_, #name ".", opc2, (opc3 | (0x1 << 4)))
6382 6382

  
6383
GEN_VXRFORM(vcmpequb, 3, 0)
6384
GEN_VXRFORM(vcmpequh, 3, 1)
6385
GEN_VXRFORM(vcmpequw, 3, 2)
6386
GEN_VXRFORM(vcmpgtsb, 3, 12)
6387
GEN_VXRFORM(vcmpgtsh, 3, 13)
6388
GEN_VXRFORM(vcmpgtsw, 3, 14)
6389
GEN_VXRFORM(vcmpgtub, 3, 8)
6390
GEN_VXRFORM(vcmpgtuh, 3, 9)
6391
GEN_VXRFORM(vcmpgtuw, 3, 10)
6392

  
6383 6393
#define GEN_VXFORM_NOA(name, opc2, opc3)                                \
6384 6394
    GEN_HANDLER(name, 0x04, opc2, opc3, 0x001f0000, PPC_ALTIVEC)        \
6385 6395
    {                                                                   \

Also available in: Unified diff