[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 21/40] Add vsldoi instruction.
From: |
Nathan Froyd |
Subject: |
[Qemu-devel] [PATCH 21/40] Add vsldoi instruction. |
Date: |
Tue, 30 Dec 2008 19:10:03 -0800 |
Signed-off-by: Nathan Froyd <address@hidden>
---
target-ppc/helper.h | 1 +
target-ppc/op_helper.c | 28 ++++++++++++++++++++++++++++
target-ppc/translate.c | 21 +++++++++++++++++++++
3 files changed, 50 insertions(+), 0 deletions(-)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index 5f94e9f..02e3c10 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -178,6 +178,7 @@ DEF_HELPER_3(vrlh, void, avr, avr, avr)
DEF_HELPER_3(vrlw, void, avr, avr, avr)
DEF_HELPER_3(vsl, void, avr, avr, avr)
DEF_HELPER_3(vsr, void, avr, avr, avr)
+DEF_HELPER_4(vsldoi, void, avr, avr, avr, i32)
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 ce47ef1..d0748b2 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2261,6 +2261,34 @@ VSL(h, u16)
VSL(w, u32)
#undef VSL
+void helper_vsldoi (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, uint32_t shift)
+{
+ int sh = shift & 0xf;
+ int i;
+ ppc_avr_t result;
+
+#if defined(WORDS_BIGENDIAN)
+ for (i = 0; i < ARRAY_SIZE(r->u8); i++) {
+ int index = sh + i;
+ if (index > 0xf) {
+ result.u8[i] = b->u8[index-0x10];
+ } else {
+ result.u8[i] = a->u8[index];
+ }
+ }
+#else
+ for (i = 0; i < ARRAY_SIZE(r->u8); i++) {
+ int index = (16 - sh) + i;
+ if (index > 0xf) {
+ result.u8[i] = a->u8[index-0x10];
+ } else {
+ result.u8[i] = b->u8[index];
+ }
+ }
+#endif
+ *r = result;
+}
+
void helper_vslo (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
int sh = (b->u8[LO_IDX*0xf] >> 3) & 0xf;
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index b50aba3..4516ba6 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -374,6 +374,8 @@ EXTRACT_HELPER(UIMM, 0, 16);
EXTRACT_HELPER(NB, 11, 5);
/* Shift count */
EXTRACT_HELPER(SH, 11, 5);
+/* Vector shift count */
+EXTRACT_HELPER(VSH, 6, 4);
/* Mask start */
EXTRACT_HELPER(MB, 6, 5);
/* Mask end */
@@ -6356,6 +6358,25 @@ GEN_VXRFORM(vcmpgtub, 3, 8)
GEN_VXRFORM(vcmpgtuh, 3, 9)
GEN_VXRFORM(vcmpgtuw, 3, 10)
+GEN_HANDLER(vsldoi, 0x04, 0x16, 0xFF, 0x00000400, PPC_ALTIVEC)
+{
+ TCGv_ptr ra, rb, rd;
+ TCGv sh;
+ if (unlikely(!ctx->altivec_enabled)) {
+ gen_exception(ctx, POWERPC_EXCP_VPU);
+ return;
+ }
+ ra = gen_avr_ptr(rA(ctx->opcode));
+ rb = gen_avr_ptr(rB(ctx->opcode));
+ rd = gen_avr_ptr(rD(ctx->opcode));
+ sh = tcg_const_i32(VSH(ctx->opcode));
+ gen_helper_vsldoi (rd, ra, rb, sh);
+ tcg_temp_free_ptr(ra);
+ tcg_temp_free_ptr(rb);
+ tcg_temp_free_ptr(rd);
+ tcg_temp_free(sh);
+}
+
/*** SPE extension ***/
/* Register moves */
--
1.6.0.5
- [Qemu-devel] [PATCH 18/40] Add v{add, sub}{s, u}{b, h, w}s instructions., (continued)
- [Qemu-devel] [PATCH 18/40] Add v{add, sub}{s, u}{b, h, w}s instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 27/40] Add vupk{h,l}px instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 28/40] Add vupk{h,l}s{b,h} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 40/40] Add vsumsws, vsum2sws, and vsum4{sbs, shs, ubs} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 36/40] Add vmsumuh{m,s} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 03/40] Add GEN_VXFORM macro for subsequent instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 23/40] Add vspltis{b,h,w} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 13/40] Add vsl{b,h,w} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 05/40] Add vavg{s,u}{b,h,w} instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 24/40] Add GEN_VXFORM_UIMM macro for subsequent instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 21/40] Add vsldoi instruction.,
Nathan Froyd <=
- [Qemu-devel] [PATCH 30/40] Add vmsum{u,m}bm instructions., Nathan Froyd, 2008/12/30
- [Qemu-devel] [PATCH 26/40] Add GEN_VXFORM_NOA macro for subsequent instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 06/40] Add v{min, max}{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 33/40] Add vpks{h, w}{s, u}s, vpku{h, w}us, and vpku{h, w}um instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 07/40] Add GEN_VXRFORM{, 1} macros for subsequent instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 08/40] Add vcmpequ{b, h, w} and vcmpgt{s, u}{b, h, w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 19/40] Add vrl{b,h,w} instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 32/40] Add saturating arithmetic conversion functions for subsequent instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 14/40] Add vs{l,r}o instructions., Nathan Froyd, 2008/12/31
- [Qemu-devel] [PATCH 34/40] Add vpkpx instruction., Nathan Froyd, 2008/12/31