Revision 5e1d0985
b/target-ppc/helper.h | ||
---|---|---|
152 | 152 |
DEF_HELPER_3(vsubcuw, void, avr, avr, avr) |
153 | 153 |
DEF_HELPER_2(lvsl, void, avr, tl); |
154 | 154 |
DEF_HELPER_2(lvsr, void, avr, tl); |
155 |
DEF_HELPER_3(vrlb, void, avr, avr, avr) |
|
156 |
DEF_HELPER_3(vrlh, void, avr, avr, avr) |
|
157 |
DEF_HELPER_3(vrlw, void, avr, avr, avr) |
|
155 | 158 |
|
156 | 159 |
DEF_HELPER_1(efscfsi, i32, i32) |
157 | 160 |
DEF_HELPER_1(efscfui, i32, i32) |
b/target-ppc/op_helper.c | ||
---|---|---|
2115 | 2115 |
#undef VMUL_DO |
2116 | 2116 |
#undef VMUL |
2117 | 2117 |
|
2118 |
#define VROTATE(suffix, element) \ |
|
2119 |
void helper_vrl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
|
2120 |
{ \ |
|
2121 |
int i; \ |
|
2122 |
for (i = 0; i < ARRAY_SIZE(r->element); i++) { \ |
|
2123 |
unsigned int mask = ((1 << (3 + (sizeof (a->element[0]) >> 1))) - 1); \ |
|
2124 |
unsigned int shift = b->element[i] & mask; \ |
|
2125 |
r->element[i] = (a->element[i] << shift) | (a->element[i] >> (sizeof(a->element[0]) * 8 - shift)); \ |
|
2126 |
} \ |
|
2127 |
} |
|
2128 |
VROTATE(b, u8) |
|
2129 |
VROTATE(h, u16) |
|
2130 |
VROTATE(w, u32) |
|
2131 |
#undef VROTATE |
|
2132 |
|
|
2118 | 2133 |
#define VSL(suffix, element) \ |
2119 | 2134 |
void helper_vsl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
2120 | 2135 |
{ \ |
b/target-ppc/translate.c | ||
---|---|---|
6264 | 6264 |
GEN_VXFORM(vsro, 6, 17); |
6265 | 6265 |
GEN_VXFORM(vaddcuw, 0, 6); |
6266 | 6266 |
GEN_VXFORM(vsubcuw, 0, 22); |
6267 |
GEN_VXFORM(vrlb, 2, 0); |
|
6268 |
GEN_VXFORM(vrlh, 2, 1); |
|
6269 |
GEN_VXFORM(vrlw, 2, 2); |
|
6267 | 6270 |
|
6268 | 6271 |
/*** SPE extension ***/ |
6269 | 6272 |
/* Register moves */ |
Also available in: Unified diff