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 | 165 | DEF_HELPER_2(vupkhsh, void, avr, avr) |
166 | 166 | DEF_HELPER_2(vupklsb, void, avr, avr) |
167 | 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 | 171 | DEF_HELPER_1(efscfsi, i32, i32) |
170 | 172 | DEF_HELPER_1(efscfui, i32, i32) | ... | ... |
target-ppc/op_helper.c
... | ... | @@ -2093,6 +2093,34 @@ VMRG(w, u32) |
2093 | 2093 | #undef MRGHI |
2094 | 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 | 2124 | #define VMUL_DO(name, mul_element, prod_element, evenp) \ |
2097 | 2125 | void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
2098 | 2126 | { \ | ... | ... |
target-ppc/translate.c