Revision d1258698
b/target-ppc/helper.h | ||
---|---|---|
167 | 167 |
DEF_HELPER_2(vupklsh, void, avr, avr) |
168 | 168 |
DEF_HELPER_4(vmsumubm, void, avr, avr, avr, avr) |
169 | 169 |
DEF_HELPER_4(vmsummbm, void, avr, avr, avr, avr) |
170 |
DEF_HELPER_4(vsel, void, avr, avr, avr, avr) |
|
171 |
DEF_HELPER_4(vperm, void, avr, avr, avr, avr) |
|
170 | 172 |
|
171 | 173 |
DEF_HELPER_1(efscfsi, i32, i32) |
172 | 174 |
DEF_HELPER_1(efscfui, i32, i32) |
b/target-ppc/op_helper.c | ||
---|---|---|
2143 | 2143 |
#undef VMUL_DO |
2144 | 2144 |
#undef VMUL |
2145 | 2145 |
|
2146 |
void helper_vperm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2147 |
{ |
|
2148 |
ppc_avr_t result; |
|
2149 |
int i; |
|
2150 |
VECTOR_FOR_INORDER_I (i, u8) { |
|
2151 |
int s = c->u8[i] & 0x1f; |
|
2152 |
#if defined(WORDS_BIGENDIAN) |
|
2153 |
int index = s & 0xf; |
|
2154 |
#else |
|
2155 |
int index = 15 - (s & 0xf); |
|
2156 |
#endif |
|
2157 |
if (s & 0x10) { |
|
2158 |
result.u8[i] = b->u8[index]; |
|
2159 |
} else { |
|
2160 |
result.u8[i] = a->u8[index]; |
|
2161 |
} |
|
2162 |
} |
|
2163 |
*r = result; |
|
2164 |
} |
|
2165 |
|
|
2146 | 2166 |
#define VROTATE(suffix, element) \ |
2147 | 2167 |
void helper_vrl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
2148 | 2168 |
{ \ |
... | ... | |
2158 | 2178 |
VROTATE(w, u32) |
2159 | 2179 |
#undef VROTATE |
2160 | 2180 |
|
2181 |
void helper_vsel (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2182 |
{ |
|
2183 |
r->u64[0] = (a->u64[0] & ~c->u64[0]) | (b->u64[0] & c->u64[0]); |
|
2184 |
r->u64[1] = (a->u64[1] & ~c->u64[1]) | (b->u64[1] & c->u64[1]); |
|
2185 |
} |
|
2186 |
|
|
2161 | 2187 |
#define VSL(suffix, element) \ |
2162 | 2188 |
void helper_vsl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
2163 | 2189 |
{ \ |
b/target-ppc/translate.c | ||
---|---|---|
6377 | 6377 |
} |
6378 | 6378 |
|
6379 | 6379 |
GEN_VAFORM_PAIRED(vmsumubm, vmsummbm, 18) |
6380 |
GEN_VAFORM_PAIRED(vsel, vperm, 21) |
|
6380 | 6381 |
|
6381 | 6382 |
/*** SPE extension ***/ |
6382 | 6383 |
/* Register moves */ |
Also available in: Unified diff