summaryrefslogtreecommitdiffstats
path: root/target/ppc/int_helper.c
diff options
context:
space:
mode:
authorLijun Pan2020-07-24 06:58:42 +0200
committerDavid Gibson2020-08-12 05:16:27 +0200
commitf3e0d864abb4de0a324cf7e77cb242b57ccb45c3 (patch)
treeea369c1095032897b708cb3343ea68eb19434728 /target/ppc/int_helper.c
parenttarget/ppc: add vmulld to INDEX_op_mul_vec case (diff)
downloadqemu-f3e0d864abb4de0a324cf7e77cb242b57ccb45c3.tar.gz
qemu-f3e0d864abb4de0a324cf7e77cb242b57ccb45c3.tar.xz
qemu-f3e0d864abb4de0a324cf7e77cb242b57ccb45c3.zip
target/ppc: add vmulh{su}w instructions
vmulhsw: Vector Multiply High Signed Word vmulhuw: Vector Multiply High Unsigned Word Signed-off-by: Lijun Pan <ljp@linux.ibm.com> Message-Id: <20200724045845.89976-4-ljp@linux.ibm.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'target/ppc/int_helper.c')
-rw-r--r--target/ppc/int_helper.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/target/ppc/int_helper.c b/target/ppc/int_helper.c
index 263e899fe0..1e866b7d3b 100644
--- a/target/ppc/int_helper.c
+++ b/target/ppc/int_helper.c
@@ -1086,6 +1086,25 @@ VMUL(uw, u32, VsrW, VsrD, uint64_t)
#undef VMUL_DO_ODD
#undef VMUL
+void helper_vmulhsw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ r->s32[i] = (int32_t)(((int64_t)a->s32[i] * (int64_t)b->s32[i]) >> 32);
+ }
+}
+
+void helper_vmulhuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
+{
+ int i;
+
+ for (i = 0; i < 4; i++) {
+ r->u32[i] = (uint32_t)(((uint64_t)a->u32[i] *
+ (uint64_t)b->u32[i]) >> 32);
+ }
+}
+
void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b,
ppc_avr_t *c)
{