[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 35/42] target-ppc: add vpks{h, w}{s, u}s, vpku{h, w
From: |
Nathan Froyd |
Subject: |
[Qemu-devel] [PATCH 35/42] target-ppc: add vpks{h, w}{s, u}s, vpku{h, w}us, and vpku{h, w}um instructions. |
Date: |
Sun, 14 Dec 2008 18:15:08 -0800 |
Signed-off-by: Nathan Froyd <address@hidden>
---
target-ppc/helper.h | 8 ++++++++
target-ppc/op_helper.c | 35 +++++++++++++++++++++++++++++++++++
target-ppc/translate.c | 8 ++++++++
3 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 8bd8cf3..a1ef4df 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -195,6 +195,14 @@ DEF_HELPER_4(vmsumubm, void, avr, avr, avr, avr)
DEF_HELPER_4(vmsummbm, void, avr, avr, avr, avr)
DEF_HELPER_4(vsel, void, avr, avr, avr, avr)
DEF_HELPER_4(vperm, void, avr, avr, avr, avr)
+DEF_HELPER_3(vpkshss, void, avr, avr, avr)
+DEF_HELPER_3(vpkshus, void, avr, avr, avr)
+DEF_HELPER_3(vpkswss, void, avr, avr, avr)
+DEF_HELPER_3(vpkswus, void, avr, avr, avr)
+DEF_HELPER_3(vpkuhus, void, avr, avr, avr)
+DEF_HELPER_3(vpkuwus, void, avr, avr, avr)
+DEF_HELPER_3(vpkuhum, void, avr, avr, avr)
+DEF_HELPER_3(vpkuwum, void, avr, avr, avr)
DEF_HELPER_1(efscfsi, i32, i32)
DEF_HELPER_1(efscfui, i32, i32)
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 4069e9d..2d53922 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2325,6 +2325,41 @@ void helper_vperm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t
*b, ppc_avr_t *c)
*r = result;
}
+#if defined(WORDS_BIGENDIAN)
+#define PKBIG 1
+#else
+#define PKBIG 0
+#endif
+#define VPK(suffix, from, to, cvt, dosat) \
+ void helper_vpk##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
+ { \
+ int i; \
+ int sat = 0; \
+ ppc_avr_t result; \
+ ppc_avr_t *a0 = PKBIG ? a : b; \
+ ppc_avr_t *a1 = PKBIG ? b : a; \
+ VECTOR_FOR_INORDER_I (i, from) { \
+ result.to[i] = cvt(a0->from[i], &sat); \
+ result.to[i+N_ELEMS(from)] = cvt(a1->from[i], &sat); \
+ } \
+ *r = result; \
+ if (dosat && sat) { \
+ env->vscr |= (1 << VSCR_SAT); \
+ } \
+ }
+#define I(x, y) (x)
+VPK(shss, s16, s8, cvtshsb, 1)
+VPK(shus, s16, u8, cvtshub, 1)
+VPK(swss, s32, s16, cvtswsh, 1)
+VPK(swus, s32, u16, cvtswuh, 1)
+VPK(uhus, u16, u8, cvtuhub, 1)
+VPK(uwus, u32, u16, cvtuwuh, 1)
+VPK(uhum, u16, u8, I, 0)
+VPK(uwum, u32, u16, I, 0)
+#undef I
+#undef VPK
+#undef PKBIG
+
#define VROTATE(suffix, element) \
void helper_vrl##suffix (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
{ \
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index b53edd9..067c17b 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6298,6 +6298,14 @@ GEN_VXFORM(vrlh, 68);
GEN_VXFORM(vrlw, 132);
GEN_VXFORM(vsl, 452);
GEN_VXFORM(vsr, 708);
+GEN_VXFORM(vpkuhum, 14);
+GEN_VXFORM(vpkuwum, 78);
+GEN_VXFORM(vpkuhus, 142);
+GEN_VXFORM(vpkuwus, 206);
+GEN_VXFORM(vpkshus, 270);
+GEN_VXFORM(vpkswus, 334);
+GEN_VXFORM(vpkshss, 398);
+GEN_VXFORM(vpkswss, 462);
#define GEN_VXFORM_NOA(name, xo) \
GEN_HANDLER(name, 0x04, (xo >> 1) & 0x1f, (xo >> 6) & 0x1f, 0x001f0000,
PPC_ALTIVEC) \
--
1.6.0.5
- [Qemu-devel] [PATCH 07/42] target-ppc: add vavg{s, u}{b, h, w} instructions., (continued)
- [Qemu-devel] [PATCH 07/42] target-ppc: add vavg{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 10/42] target-ppc: add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 12/42] target-ppc: add vmrg{l, h}{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 14/42] target-ppc: add vsr{, a}{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 17/42] target-ppc: add v{add, sub}cuw instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 18/42] target-ppc: add lvs{l,r} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 19/42] target-ppc: add m{f, t}vscr instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 23/42] target-ppc: add vsldoi instruction., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 28/42] target-ppc: add GEN_VXFORM_NOA macro for subsequent instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 31/42] target-ppc: add GEN_VAFORM_PAIRED macro for subsequent instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 35/42] target-ppc: add vpks{h, w}{s, u}s, vpku{h, w}us, and vpku{h, w}um instructions.,
Nathan Froyd <=
- [Qemu-devel] [PATCH 39/42] target-ppc: add vmsumsh{m, s} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 42/42] target-ppc: add vsumsws, vsum2sws, and vsum4{sbs, shs, ubs} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 02/42] target-ppc: add helper macros for later patches., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 08/42] target-ppc: add v{min, max}{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 13/42] target-ppc: add vmul{e, o}{s, u}{b, h} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 21/42] target-ppc: add vrl{b, h, w} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 26/42] target-ppc: add GEN_VXFORM_UIMM macro for subsequent instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 30/42] target-ppc: add vupk{h, l}s{b, h} instructions., Nathan Froyd, 2008/12/14