Commit 2c2779080c2dbdeaefca59742be9648dd1878044

Authored by aurel32
1 parent 3b430048

Add vmul{e,o}{s,u}{b,h} 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@6164 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/helper.h
... ... @@ -129,6 +129,14 @@ DEF_HELPER_3(vmrglw, void, avr, avr, avr)
129 129 DEF_HELPER_3(vmrghb, void, avr, avr, avr)
130 130 DEF_HELPER_3(vmrghh, void, avr, avr, avr)
131 131 DEF_HELPER_3(vmrghw, void, avr, avr, avr)
  132 +DEF_HELPER_3(vmulesb, void, avr, avr, avr)
  133 +DEF_HELPER_3(vmulesh, void, avr, avr, avr)
  134 +DEF_HELPER_3(vmuleub, void, avr, avr, avr)
  135 +DEF_HELPER_3(vmuleuh, void, avr, avr, avr)
  136 +DEF_HELPER_3(vmulosb, void, avr, avr, avr)
  137 +DEF_HELPER_3(vmulosh, void, avr, avr, avr)
  138 +DEF_HELPER_3(vmuloub, void, avr, avr, avr)
  139 +DEF_HELPER_3(vmulouh, void, avr, avr, avr)
132 140  
133 141 DEF_HELPER_1(efscfsi, i32, i32)
134 142 DEF_HELPER_1(efscfui, i32, i32)
... ...
target-ppc/op_helper.c
... ... @@ -2066,6 +2066,28 @@ VMRG(w, u32)
2066 2066 #undef MRGHI
2067 2067 #undef MRGLO
2068 2068  
  2069 +#define VMUL_DO(name, mul_element, prod_element, evenp) \
  2070 + void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
  2071 + { \
  2072 + int i; \
  2073 + VECTOR_FOR_INORDER_I(i, prod_element) { \
  2074 + if (evenp) { \
  2075 + r->prod_element[i] = a->mul_element[i*2+HI_IDX] * b->mul_element[i*2+HI_IDX]; \
  2076 + } else { \
  2077 + r->prod_element[i] = a->mul_element[i*2+LO_IDX] * b->mul_element[i*2+LO_IDX]; \
  2078 + } \
  2079 + } \
  2080 + }
  2081 +#define VMUL(suffix, mul_element, prod_element) \
  2082 + VMUL_DO(mule##suffix, mul_element, prod_element, 1) \
  2083 + VMUL_DO(mulo##suffix, mul_element, prod_element, 0)
  2084 +VMUL(sb, s8, s16)
  2085 +VMUL(sh, s16, s32)
  2086 +VMUL(ub, u8, u16)
  2087 +VMUL(uh, u16, u32)
  2088 +#undef VMUL_DO
  2089 +#undef VMUL
  2090 +
2069 2091 #undef VECTOR_FOR_INORDER_I
2070 2092 #undef HI_IDX
2071 2093 #undef LO_IDX
... ...
target-ppc/translate.c
... ... @@ -6211,6 +6211,14 @@ GEN_VXFORM(vmrghw, 6, 2);
6211 6211 GEN_VXFORM(vmrglb, 6, 4);
6212 6212 GEN_VXFORM(vmrglh, 6, 5);
6213 6213 GEN_VXFORM(vmrglw, 6, 6);
  6214 +GEN_VXFORM(vmuloub, 4, 0);
  6215 +GEN_VXFORM(vmulouh, 4, 1);
  6216 +GEN_VXFORM(vmulosb, 4, 4);
  6217 +GEN_VXFORM(vmulosh, 4, 5);
  6218 +GEN_VXFORM(vmuleub, 4, 8);
  6219 +GEN_VXFORM(vmuleuh, 4, 9);
  6220 +GEN_VXFORM(vmulesb, 4, 12);
  6221 +GEN_VXFORM(vmulesh, 4, 13);
6214 6222  
6215 6223 /*** SPE extension ***/
6216 6224 /* Register moves */
... ...