Commit fab3cbe9012019810ddf8eaabad0d34a72858133

Authored by aurel32
1 parent 7872c51c

Add vavg{s,u}{b,h,w} 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@6156 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/helper.h
... ... @@ -105,6 +105,13 @@ DEF_HELPER_3(vadduwm, void, avr, avr, avr)
105 105 DEF_HELPER_3(vsububm, void, avr, avr, avr)
106 106 DEF_HELPER_3(vsubuhm, void, avr, avr, avr)
107 107 DEF_HELPER_3(vsubuwm, void, avr, avr, avr)
  108 +DEF_HELPER_3(vavgub, void, avr, avr, avr)
  109 +DEF_HELPER_3(vavguh, void, avr, avr, avr)
  110 +DEF_HELPER_3(vavguw, void, avr, avr, avr)
  111 +DEF_HELPER_3(vavgsb, void, avr, avr, avr)
  112 +DEF_HELPER_3(vavgsh, void, avr, avr, avr)
  113 +DEF_HELPER_3(vavgsw, void, avr, avr, avr)
  114 +
108 115 DEF_HELPER_1(efscfsi, i32, i32)
109 116 DEF_HELPER_1(efscfui, i32, i32)
110 117 DEF_HELPER_1(efscfuf, i32, i32)
... ...
target-ppc/op_helper.c
... ... @@ -1988,6 +1988,25 @@ VARITH(uwm, u32)
1988 1988 #undef VARITH_DO
1989 1989 #undef VARITH
1990 1990  
  1991 +#define VAVG_DO(name, element, etype) \
  1992 + void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
  1993 + { \
  1994 + int i; \
  1995 + for (i = 0; i < ARRAY_SIZE(r->element); i++) { \
  1996 + etype x = (etype)a->element[i] + (etype)b->element[i] + 1; \
  1997 + r->element[i] = x >> 1; \
  1998 + } \
  1999 + }
  2000 +
  2001 +#define VAVG(type, signed_element, signed_type, unsigned_element, unsigned_type) \
  2002 + VAVG_DO(avgs##type, signed_element, signed_type) \
  2003 + VAVG_DO(avgu##type, unsigned_element, unsigned_type)
  2004 +VAVG(b, s8, int16_t, u8, uint16_t)
  2005 +VAVG(h, s16, int32_t, u16, uint32_t)
  2006 +VAVG(w, s32, int64_t, u32, uint64_t)
  2007 +#undef VAVG_DO
  2008 +#undef VAVG
  2009 +
1991 2010 #undef VECTOR_FOR_INORDER_I
1992 2011 #undef HI_IDX
1993 2012 #undef LO_IDX
... ...
target-ppc/translate.c
... ... @@ -6187,6 +6187,13 @@ GEN_VXFORM(vadduwm, 0, 2);
6187 6187 GEN_VXFORM(vsububm, 0, 16);
6188 6188 GEN_VXFORM(vsubuhm, 0, 17);
6189 6189 GEN_VXFORM(vsubuwm, 0, 18);
  6190 +GEN_VXFORM(vavgub, 1, 16);
  6191 +GEN_VXFORM(vavguh, 1, 17);
  6192 +GEN_VXFORM(vavguw, 1, 18);
  6193 +GEN_VXFORM(vavgsb, 1, 20);
  6194 +GEN_VXFORM(vavgsh, 1, 21);
  6195 +GEN_VXFORM(vavgsw, 1, 22);
  6196 +
6190 6197 /*** SPE extension ***/
6191 6198 /* Register moves */
6192 6199  
... ...