[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 40/42] target-ppc: add vmladduhm instruction.
From: |
Nathan Froyd |
Subject: |
[Qemu-devel] [PATCH 40/42] target-ppc: add vmladduhm instruction. |
Date: |
Sun, 14 Dec 2008 18:15:13 -0800 |
Signed-off-by: Nathan Froyd <address@hidden>
---
target-ppc/helper.h | 1 +
target-ppc/op_helper.c | 8 ++++++++
target-ppc/translate.c | 19 +++++++++++++++++++
3 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/target-ppc/helper.h b/target-ppc/helper.h
index b4b9521..f97480e 100644
--- a/target-ppc/helper.h
+++ b/target-ppc/helper.h
@@ -210,6 +210,7 @@ DEF_HELPER_4(vmsumuhm, void, avr, avr, avr, avr)
DEF_HELPER_4(vmsumuhs, void, avr, avr, avr, avr)
DEF_HELPER_4(vmsumshm, void, avr, avr, avr, avr)
DEF_HELPER_4(vmsumshs, void, avr, avr, avr, avr)
+DEF_HELPER_4(vmladduhm, void, avr, 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 8086ca4..e6e6cb9 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -2250,6 +2250,14 @@ VMINMAX(uw, u32)
#undef VMINMAX_DO
#undef VMINMAX
+void helper_vmladduhm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
+{
+ VECTOR_FOR (s16) {
+ int32_t prod = a->s16[i] * b->s16[i];
+ r->s16[i] = (int16_t) (prod + c->s16[i]);
+ }
+}
+
#define VMRG_DO(name, element, highp) \
void helper_v##name (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 9a69861..985af3f 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -6452,6 +6452,25 @@ GEN_HANDLER(vsldoi, 0x04, 0x16, 0xFF, 0x00000400,
PPC_ALTIVEC)
}
GEN_VAFORM_PAIRED(vmhaddshs, vmhraddshs, 32)
+
+GEN_HANDLER(vmladduhm, 0x04, 0x11, 0xFF, 0x00000000, PPC_ALTIVEC)
+{
+ TCGv_ptr ra, rb, rc, rd;
+ 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));
+ rc = gen_avr_ptr(rC(ctx->opcode));
+ rd = gen_avr_ptr(rD(ctx->opcode));
+ gen_helper_vmladduhm(rd, ra, rb, rc);
+ tcg_temp_free(ra);
+ tcg_temp_free(rb);
+ tcg_temp_free(rc);
+ tcg_temp_free(rd);
+}
+
GEN_VAFORM_PAIRED(vmsumubm, vmsummbm, 36)
GEN_VAFORM_PAIRED(vmsumuhm, vmsumuhs, 38)
GEN_VAFORM_PAIRED(vmsumshm, vmsumshs, 40)
--
1.6.0.5
- [Qemu-devel] [PATCH 32/42] target-ppc: add vmsum{u, m}bm instructions., (continued)
- [Qemu-devel] [PATCH 32/42] target-ppc: add vmsum{u, m}bm instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 37/42] target-ppc: add vmh{, r}addshs instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 33/42] target-ppc: add vsel and vperm instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 05/42] target-ppc: add v{add, sub}u{b, h, w}m instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 11/42] target-ppc: add vscr access macros., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 16/42] target-ppc: add vs{l,r}o instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 20/42] target-ppc: add v{add, sub}{s, u}{b, h, w}s instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 38/42] target-ppc: add vmsumuh{m, s} instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 41/42] target-ppc: add {l, st}ve{b, h, w}x instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 24/42] target-ppc: add GEN_VXFORM_SIMM macro for subsequent instructions., Nathan Froyd, 2008/12/14
- [Qemu-devel] [PATCH 40/42] target-ppc: add vmladduhm instruction.,
Nathan Froyd <=
- [Qemu-devel] [PATCH 25/42] target-ppc: add vspltis{b, h, w} instructions., Nathan Froyd, 2008/12/15
- Re: [Qemu-devel] [PATCH] target-ppc: add Altivec instructions, patch-bomb version, Aurelien Jarno, 2008/12/15