Commit b04ae9811a944c2c7356692c13dcf32505b87d84
1 parent
707cec33
Add vmsum{u,m}bm instructions.
Signed-off-by: Nathan Froyd <froydnj@codesourcery.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6179 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
32 additions
and
0 deletions
target-ppc/helper.h
| @@ -165,6 +165,8 @@ DEF_HELPER_2(vupkhsb, void, avr, avr) | @@ -165,6 +165,8 @@ DEF_HELPER_2(vupkhsb, void, avr, avr) | ||
| 165 | DEF_HELPER_2(vupkhsh, void, avr, avr) | 165 | DEF_HELPER_2(vupkhsh, void, avr, avr) |
| 166 | DEF_HELPER_2(vupklsb, void, avr, avr) | 166 | DEF_HELPER_2(vupklsb, void, avr, avr) |
| 167 | DEF_HELPER_2(vupklsh, void, avr, avr) | 167 | DEF_HELPER_2(vupklsh, void, avr, avr) |
| 168 | +DEF_HELPER_4(vmsumubm, void, avr, avr, avr, avr) | ||
| 169 | +DEF_HELPER_4(vmsummbm, void, avr, avr, avr, avr) | ||
| 168 | 170 | ||
| 169 | DEF_HELPER_1(efscfsi, i32, i32) | 171 | DEF_HELPER_1(efscfsi, i32, i32) |
| 170 | DEF_HELPER_1(efscfui, i32, i32) | 172 | DEF_HELPER_1(efscfui, i32, i32) |
target-ppc/op_helper.c
| @@ -2093,6 +2093,34 @@ VMRG(w, u32) | @@ -2093,6 +2093,34 @@ VMRG(w, u32) | ||
| 2093 | #undef MRGHI | 2093 | #undef MRGHI |
| 2094 | #undef MRGLO | 2094 | #undef MRGLO |
| 2095 | 2095 | ||
| 2096 | +void helper_vmsummbm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) | ||
| 2097 | +{ | ||
| 2098 | + int32_t prod[16]; | ||
| 2099 | + int i; | ||
| 2100 | + | ||
| 2101 | + for (i = 0; i < ARRAY_SIZE(r->s8); i++) { | ||
| 2102 | + prod[i] = (int32_t)a->s8[i] * b->u8[i]; | ||
| 2103 | + } | ||
| 2104 | + | ||
| 2105 | + VECTOR_FOR_INORDER_I(i, s32) { | ||
| 2106 | + r->s32[i] = c->s32[i] + prod[4*i] + prod[4*i+1] + prod[4*i+2] + prod[4*i+3]; | ||
| 2107 | + } | ||
| 2108 | +} | ||
| 2109 | + | ||
| 2110 | +void helper_vmsumubm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) | ||
| 2111 | +{ | ||
| 2112 | + uint16_t prod[16]; | ||
| 2113 | + int i; | ||
| 2114 | + | ||
| 2115 | + for (i = 0; i < ARRAY_SIZE(r->u8); i++) { | ||
| 2116 | + prod[i] = a->u8[i] * b->u8[i]; | ||
| 2117 | + } | ||
| 2118 | + | ||
| 2119 | + VECTOR_FOR_INORDER_I(i, u32) { | ||
| 2120 | + r->u32[i] = c->u32[i] + prod[4*i] + prod[4*i+1] + prod[4*i+2] + prod[4*i+3]; | ||
| 2121 | + } | ||
| 2122 | +} | ||
| 2123 | + | ||
| 2096 | #define VMUL_DO(name, mul_element, prod_element, evenp) \ | 2124 | #define VMUL_DO(name, mul_element, prod_element, evenp) \ |
| 2097 | void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ | 2125 | void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
| 2098 | { \ | 2126 | { \ |
target-ppc/translate.c
| @@ -6376,6 +6376,8 @@ GEN_HANDLER(vsldoi, 0x04, 0x16, 0xFF, 0x00000400, PPC_ALTIVEC) | @@ -6376,6 +6376,8 @@ GEN_HANDLER(vsldoi, 0x04, 0x16, 0xFF, 0x00000400, PPC_ALTIVEC) | ||
| 6376 | tcg_temp_free_ptr(rd); \ | 6376 | tcg_temp_free_ptr(rd); \ |
| 6377 | } | 6377 | } |
| 6378 | 6378 | ||
| 6379 | +GEN_VAFORM_PAIRED(vmsumubm, vmsummbm, 18) | ||
| 6380 | + | ||
| 6379 | /*** SPE extension ***/ | 6381 | /*** SPE extension ***/ |
| 6380 | /* Register moves */ | 6382 | /* Register moves */ |
| 6381 | 6383 |