diff options
author | Lijun Pan | 2020-07-24 06:58:42 +0200 |
---|---|---|
committer | David Gibson | 2020-08-12 05:16:27 +0200 |
commit | f3e0d864abb4de0a324cf7e77cb242b57ccb45c3 (patch) | |
tree | ea369c1095032897b708cb3343ea68eb19434728 /target/ppc/int_helper.c | |
parent | target/ppc: add vmulld to INDEX_op_mul_vec case (diff) | |
download | qemu-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.c | 19 |
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) { |