]> git.proxmox.com Git - qemu.git/commitdiff
target-mips: use DSP unions for reduction add instructions
authorAurelien Jarno <aurelien@aurel32.net>
Tue, 1 Jan 2013 17:02:23 +0000 (18:02 +0100)
committerAurelien Jarno <aurelien@aurel32.net>
Thu, 31 Jan 2013 22:30:16 +0000 (23:30 +0100)
Reviewed-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
target-mips/dsp_helper.c

index bcc3885601c8a7970f0586da7f65fcd7966592c6..f5de2ca8e52d5df4cf240f3da775ebaf3fe82210 100644 (file)
@@ -1352,31 +1352,29 @@ target_ulong helper_modsub(target_ulong rs, target_ulong rt)
 
 target_ulong helper_raddu_w_qb(target_ulong rs)
 {
-    uint8_t  rs3, rs2, rs1, rs0;
-    uint16_t temp;
-
-    MIPSDSP_SPLIT32_8(rs, rs3, rs2, rs1, rs0);
-
-    temp = (uint16_t)rs3 + (uint16_t)rs2 + (uint16_t)rs1 + (uint16_t)rs0;
+    target_ulong ret = 0;
+    DSP32Value ds;
+    unsigned int i;
 
-    return (target_ulong)temp;
+    ds.uw[0] = rs;
+    for (i = 0; i < 4; i++) {
+        ret += ds.ub[i];
+    }
+    return ret;
 }
 
 #if defined(TARGET_MIPS64)
 target_ulong helper_raddu_l_ob(target_ulong rs)
 {
-    int i;
-    uint16_t rs_t[8];
-    uint64_t temp;
-
-    temp = 0;
+    target_ulong ret = 0;
+    DSP64Value ds;
+    unsigned int i;
 
+    ds.ul[0] = rs;
     for (i = 0; i < 8; i++) {
-        rs_t[i] = (rs >> (8 * i)) & MIPSDSP_Q0;
-        temp += (uint64_t)rs_t[i];
+        ret += ds.ub[i];
     }
-
-    return temp;
+    return ret;
 }
 #endif