[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 37/48] target-arm: fix neon vqrshl instruction
From: |
Riku Voipio |
Subject: |
[Qemu-devel] [PATCH 37/48] target-arm: fix neon vqrshl instruction |
Date: |
Fri, 26 Mar 2010 16:06:57 +0000 |
From: Juha Riihimäki <address@hidden>
Signed-Off-By: Riku Voipio <address@hidden>
Signed-off-by: Juha Riihimäki <address@hidden>
---
target-arm/neon_helper.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/target-arm/neon_helper.c b/target-arm/neon_helper.c
index 7985293..ec1964f 100644
--- a/target-arm/neon_helper.c
+++ b/target-arm/neon_helper.c
@@ -727,9 +727,24 @@ uint64_t HELPER(neon_qshlu_s64)(CPUState *env, uint64_t
valop, uint64_t shiftop)
}} while (0)
NEON_VOP_ENV(qrshl_u8, neon_u8, 4)
NEON_VOP_ENV(qrshl_u16, neon_u16, 2)
-NEON_VOP_ENV(qrshl_u32, neon_u32, 1)
#undef NEON_FN
+uint32_t HELPER(neon_qrshl_u32)(CPUState *env, uint32_t val, uint32_t shiftop)
+{
+ int8_t shift = (int8_t)shiftop;
+ if (shift < 0) {
+ val = ((uint64_t)val + (1 << (-1 - shift))) >> -shift;
+ } else {
+ uint32_t tmp = val;
+ val <<= shift;
+ if ((val >> shift) != tmp) {
+ SET_QC();
+ val = ~0;
+ }
+ }
+ return val;
+}
+
uint64_t HELPER(neon_qrshl_u64)(CPUState *env, uint64_t val, uint64_t shiftop)
{
int8_t shift = (int8_t)shiftop;
@@ -755,7 +770,7 @@ uint64_t HELPER(neon_qrshl_u64)(CPUState *env, uint64_t
val, uint64_t shiftop)
dest = src1 << tmp; \
if ((dest >> tmp) != src1) { \
SET_QC(); \
- dest = src1 >> 31; \
+ dest = (uint32_t)(1 << (sizeof(src1) * 8 - 1)) - (src1 > 0 ? 1 :
0); \
} \
}} while (0)
NEON_VOP_ENV(qrshl_s8, neon_s8, 4)
@@ -771,7 +786,7 @@ uint64_t HELPER(neon_qrshl_s64)(CPUState *env, uint64_t
valop, uint64_t shiftop)
if (shift < 0) {
val = (val + (1 << (-1 - shift))) >> -shift;
} else {
- int64_t tmp = val;;
+ int64_t tmp = val;
val <<= shift;
if ((val >> shift) != tmp) {
SET_QC();
--
1.6.5
- Re: [Qemu-devel] [PATCH 22/48] License update, (continued)
- [Qemu-devel] [PATCH 44/48] target-arm: fix neon v(q)(r)shrn instructions, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 21/48] NAND emulation overhaul, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 04/48] audio: fix integer overflow expression, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 33/48] Add OpenGL ES accelerator support, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 34/48] target-arm: add support for smc, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 30/48] savevm and reset support for soc_dma, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 29/48] Add triton2 (twl4030) driver, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 20/48] add reset support for musb, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 19/48] usb-ohci: add omap init support, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 37/48] target-arm: fix neon vqrshl instruction,
Riku Voipio <=
- [Qemu-devel] [PATCH 27/48] tsc2005 overhaul, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 10/48] Lots of ARM TCG changes, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 36/48] target-arm: fix neon vqshl/vqshlu instructions, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 24/48] onenand overhaul, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 26/48] SD overhaul, Riku Voipio, 2010/03/26
- [Qemu-devel] [PATCH 05/48] audio: fix coreaudio compilation, Riku Voipio, 2010/03/26
- Re: [Qemu-devel] [PATCH 00/48] RFC: omap3 patch collection, Paul Brook, 2010/03/26