[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/42] target-ppc: add vmrg{l, h}{b, h, w} instructi
From: |
Nathan Froyd |
Subject: |
[Qemu-devel] [PATCH 12/42] target-ppc: add vmrg{l, h}{b, h, w} instructions. |
Date: |
Sun, 14 Dec 2008 18:14:45 -0800 |
Signed-off-by: Nathan Froyd <address@hidden>
---
target-ppc/helper.h | 6 ++++++
target-ppc/op_helper.c | 35 +++++++++++++++++++++++++++++++++++
target-ppc/translate.c | 6 ++++++
3 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index efe7a1a..5a05157 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -123,6 +123,12 @@ DEF_HELPER_3(vminuw, void, avr, avr, avr)
DEF_HELPER_3(vmaxub, void, avr, avr, avr)
DEF_HELPER_3(vmaxuh, void, avr, avr, avr)
DEF_HELPER_3(vmaxuw, void, avr, avr, avr)
+DEF_HELPER_3(vmrglb, void, avr, avr, avr)
+DEF_HELPER_3(vmrglh, void, avr, avr, avr)
+DEF_HELPER_3(vmrglw, void, avr, avr, avr)
+DEF_HELPER_3(vmrghb, void, avr, avr, avr)
+DEF_HELPER_3(vmrghh, void, avr, avr, avr)
+DEF_HELPER_3(vmrghw, void, avr, avr, avr)
DEF_HELPER_3(vcmpequb, i32, avr, avr, avr)
DEF_HELPER_3(vcmpequh, i32, avr, avr, avr)
DEF_HELPER_3(vcmpequw, i32, avr, avr, avr)
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index d36a046..886c1fa 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2122,6 +2122,41 @@ VMINMAX(uw, u32)
#undef VMINMAX_DO
#undef VMINMAX
+#define VMRG_DO(name, element, highp) \
+ void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \
+ { \
+ ppc_avr_t result; \
+ int i; \
+ size_t n_elems = N_ELEMS(element); \
+ for (i = 0; i < n_elems/2; i++) { \
+ if (highp) { \
+ result.element[i*2+HI_IDX] = a->element[i]; \
+ result.element[i*2+LO_IDX] = b->element[i]; \
+ } else { \
+ result.element[n_elems - i*2 - (1+HI_IDX)] =
b->element[n_elems - i - 1]; \
+ result.element[n_elems - i*2 - (1+LO_IDX)] =
a->element[n_elems - i - 1]; \
+ } \
+ } \
+ *r = result; \
+ }
+#if defined(WORDS_BIGENDIAN)
+#define MRGHI 0
+#define MRGL0 1
+#else
+#define MRGHI 1
+#define MRGLO 0
+#endif
+#define VMRG(suffix, element) \
+ VMRG_DO(mrgl##suffix, element, MRGHI) \
+ VMRG_DO(mrgh##suffix, element, MRGLO)
+VMRG(b, u8)
+VMRG(h, u16)
+VMRG(w, u32)
+#undef VMRG_DO
+#undef VMRG
+#undef MRGHI
+#undef MRGLO
+
#undef VECTOR_FOR
#undef VECTOR_FOR_I
#undef VECTOR_FOR_INORDER_I
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index 8b90971..5b4c5cd 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6175,6 +6175,12 @@ GEN_VXFORM(vavguw, 1154);
GEN_VXFORM(vavgsb, 1282);
GEN_VXFORM(vavgsh, 1346);
GEN_VXFORM(vavgsw, 1410);
+GEN_VXFORM(vmrghb, 12);
+GEN_VXFORM(vmrghh, 76);
+GEN_VXFORM(vmrghw, 140);
+GEN_VXFORM(vmrglb, 268);
+GEN_VXFORM(vmrglh, 332);
+GEN_VXFORM(vmrglw, 396);
#define GEN_VXRFORM1(opname, name, str, xo, rc) \
GEN_HANDLER2(name, str, 0x4, (xo >> 1) & 0x1f, ((xo >> 6) & 0x1f) | (rc <<
4), 0x00000000, PPC_ALTIVEC) \
--
1.6.0.5
- [Qemu-devel] [PATCH] target-ppc: add Altivec instructions, patch-bomb version, Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 06/42] target-ppc: add signed fields to ppc_avr_t., Nathan Froyd, 2008/12/14
- [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 <=
- [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, 2008/12/14
- [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
- Prev by Date:
[Qemu-devel] [PATCH 10/42] target-ppc: add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions.
- Next by Date:
[Qemu-devel] [PATCH 14/42] target-ppc: add vsr{, a}{b, h, w} instructions.
- Previous by thread:
[Qemu-devel] [PATCH 10/42] target-ppc: add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions.
- Next by thread:
[Qemu-devel] [PATCH 14/42] target-ppc: add vsr{, a}{b, h, w} instructions.
- Index(es):