Commit e40393399a4ed120deee90b0fdd5afbd8aa2301e

Authored by aurel32
1 parent fab3cbe9

Add v{min, max}{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@6157 c046a42c-6fe2-441c-8c8c-71466251a162
target-ppc/helper.h
... ... @@ -111,6 +111,18 @@ DEF_HELPER_3(vavguw, void, avr, avr, avr)
111 111 DEF_HELPER_3(vavgsb, void, avr, avr, avr)
112 112 DEF_HELPER_3(vavgsh, void, avr, avr, avr)
113 113 DEF_HELPER_3(vavgsw, void, avr, avr, avr)
  114 +DEF_HELPER_3(vminsb, void, avr, avr, avr)
  115 +DEF_HELPER_3(vminsh, void, avr, avr, avr)
  116 +DEF_HELPER_3(vminsw, void, avr, avr, avr)
  117 +DEF_HELPER_3(vmaxsb, void, avr, avr, avr)
  118 +DEF_HELPER_3(vmaxsh, void, avr, avr, avr)
  119 +DEF_HELPER_3(vmaxsw, void, avr, avr, avr)
  120 +DEF_HELPER_3(vminub, void, avr, avr, avr)
  121 +DEF_HELPER_3(vminuh, void, avr, avr, avr)
  122 +DEF_HELPER_3(vminuw, void, avr, avr, avr)
  123 +DEF_HELPER_3(vmaxub, void, avr, avr, avr)
  124 +DEF_HELPER_3(vmaxuh, void, avr, avr, avr)
  125 +DEF_HELPER_3(vmaxuw, void, avr, avr, avr)
114 126  
115 127 DEF_HELPER_1(efscfsi, i32, i32)
116 128 DEF_HELPER_1(efscfui, i32, i32)
... ...
target-ppc/op_helper.c
... ... @@ -2007,6 +2007,30 @@ VAVG(w, s32, int64_t, u32, uint64_t)
2007 2007 #undef VAVG_DO
2008 2008 #undef VAVG
2009 2009  
  2010 +#define VMINMAX_DO(name, compare, element) \
  2011 + void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
  2012 + { \
  2013 + int i; \
  2014 + for (i = 0; i < ARRAY_SIZE(r->element); i++) { \
  2015 + if (a->element[i] compare b->element[i]) { \
  2016 + r->element[i] = b->element[i]; \
  2017 + } else { \
  2018 + r->element[i] = a->element[i]; \
  2019 + } \
  2020 + } \
  2021 + }
  2022 +#define VMINMAX(suffix, element) \
  2023 + VMINMAX_DO(min##suffix, >, element) \
  2024 + VMINMAX_DO(max##suffix, <, element)
  2025 +VMINMAX(sb, s8)
  2026 +VMINMAX(sh, s16)
  2027 +VMINMAX(sw, s32)
  2028 +VMINMAX(ub, u8)
  2029 +VMINMAX(uh, u16)
  2030 +VMINMAX(uw, u32)
  2031 +#undef VMINMAX_DO
  2032 +#undef VMINMAX
  2033 +
2010 2034 #undef VECTOR_FOR_INORDER_I
2011 2035 #undef HI_IDX
2012 2036 #undef LO_IDX
... ...
target-ppc/translate.c
... ... @@ -6187,6 +6187,18 @@ 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(vmaxub, 1, 0);
  6191 +GEN_VXFORM(vmaxuh, 1, 1);
  6192 +GEN_VXFORM(vmaxuw, 1, 2);
  6193 +GEN_VXFORM(vmaxsb, 1, 4);
  6194 +GEN_VXFORM(vmaxsh, 1, 5);
  6195 +GEN_VXFORM(vmaxsw, 1, 6);
  6196 +GEN_VXFORM(vminub, 1, 8);
  6197 +GEN_VXFORM(vminuh, 1, 9);
  6198 +GEN_VXFORM(vminuw, 1, 10);
  6199 +GEN_VXFORM(vminsb, 1, 12);
  6200 +GEN_VXFORM(vminsh, 1, 13);
  6201 +GEN_VXFORM(vminsw, 1, 14);
6190 6202 GEN_VXFORM(vavgub, 1, 16);
6191 6203 GEN_VXFORM(vavguh, 1, 17);
6192 6204 GEN_VXFORM(vavguw, 1, 18);
... ...