2015-11-30 13:25:46 +01:00
|
|
|
mips: replace addi with addiu
|
|
|
|
|
|
|
|
ADDI instruction has been removed in R6 so let's use ADDIU instead.
|
|
|
|
|
|
|
|
This patch has been sent upstream:
|
|
|
|
|
|
|
|
https://bugs.kde.org/show_bug.cgi?id=356112
|
|
|
|
|
|
|
|
Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
|
|
|
|
|
|
|
|
Index: valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S (revision 15740)
|
|
|
|
+++ valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S (working copy)
|
|
|
|
@@ -196,7 +196,7 @@
|
|
|
|
addu $13, $13, $14
|
|
|
|
|
|
|
|
lw $12, 0($13) /* t3 = VG_(tt_fast)[hash] :: ULong* */
|
|
|
|
- addi $13, $13, 4
|
|
|
|
+ addiu $13, $13, 4
|
|
|
|
lw $25, 0($13) /* little-endian, so comparing 1st 32bit word */
|
|
|
|
nop
|
|
|
|
|
2015-12-01 15:58:34 +01:00
|
|
|
Index: valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S (revision 15740)
|
|
|
|
+++ valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S (working copy)
|
|
|
|
@@ -196,7 +196,7 @@
|
|
|
|
daddu $13, $13, $14
|
|
|
|
|
|
|
|
ld $12, 0($13) /* t3 = VG_(tt_fast)[hash] :: ULong* */
|
|
|
|
- daddi $13, $13, 8
|
|
|
|
+ daddiu $13, $13, 8
|
|
|
|
ld $25, 0($13) /* little-endian, so comparing 1st 32bit word */
|
|
|
|
nop
|
|
|
|
|
2015-11-30 13:25:46 +01:00
|
|
|
Index: valgrind/coregrind/m_libcsetjmp.c
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/coregrind/m_libcsetjmp.c (revision 15740)
|
|
|
|
+++ valgrind/coregrind/m_libcsetjmp.c (working copy)
|
|
|
|
@@ -594,7 +594,7 @@
|
|
|
|
/* Checking whether second argument is zero. */
|
|
|
|
" bnez $a1, 1f \n\t"
|
|
|
|
" nop \n\t"
|
|
|
|
-" addi $a1, $a1, 1 \n\t" /* We must return 1 if val=0. */
|
|
|
|
+" addiu $a1, $a1, 1 \n\t" /* We must return 1 if val=0. */
|
|
|
|
"1: \n\t"
|
|
|
|
" move $v0, $a1 \n\t" /* Return value of second argument. */
|
|
|
|
" j $ra \n\t"
|
2015-12-01 15:58:34 +01:00
|
|
|
Index: valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c (revision 15740)
|
|
|
|
+++ valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c (working copy)
|
|
|
|
@@ -173,7 +173,7 @@
|
|
|
|
" ld $30, 8($29)\n"
|
|
|
|
" ld $28, 16($29)\n"
|
|
|
|
" jr $31\n"
|
|
|
|
-" daddi $29,$29, 32\n"
|
|
|
|
+" daddiu $29,$29, 32\n"
|
|
|
|
".previous\n"
|
|
|
|
);
|
|
|
|
|
2015-11-30 13:25:46 +01:00
|
|
|
Index: valgrind/coregrind/m_trampoline.S
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/coregrind/m_trampoline.S (revision 15740)
|
|
|
|
+++ valgrind/coregrind/m_trampoline.S (working copy)
|
|
|
|
@@ -1254,8 +1254,8 @@
|
|
|
|
//la $a0, string
|
|
|
|
j strlen_cond
|
|
|
|
strlen_loop:
|
|
|
|
- addi $v0, $v0, 1
|
|
|
|
- addi $a0, $a0, 1
|
|
|
|
+ addiu $v0, $v0, 1
|
|
|
|
+ addiu $a0, $a0, 1
|
|
|
|
strlen_cond:
|
|
|
|
lbu $t0, ($a0)
|
|
|
|
bne $t0, $zero, strlen_loop
|
2015-12-01 15:58:34 +01:00
|
|
|
Index: valgrind/helgrind/tests/tc08_hbl2.c
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/helgrind/tests/tc08_hbl2.c (revision 15740)
|
|
|
|
+++ valgrind/helgrind/tests/tc08_hbl2.c (working copy)
|
|
|
|
@@ -125,11 +125,11 @@
|
|
|
|
# define INC(_lval,_lqual) \
|
|
|
|
__asm__ __volatile__ ( \
|
|
|
|
"L1xyzzy1" _lqual":\n" \
|
|
|
|
- " move $t0, %0\n" \
|
|
|
|
- " ll $t1, 0($t0)\n" \
|
|
|
|
- " addi $t1, $t1, 1\n" \
|
|
|
|
- " sc $t1, 0($t0)\n" \
|
|
|
|
- " beqz $t1, L1xyzzy1" _lqual \
|
|
|
|
+ " move $t0, %0\n" \
|
|
|
|
+ " ll $t1, 0($t0)\n" \
|
|
|
|
+ " addiu $t1, $t1, 1\n" \
|
|
|
|
+ " sc $t1, 0($t0)\n" \
|
|
|
|
+ " beqz $t1, L1xyzzy1" _lqual \
|
|
|
|
: /*out*/ : /*in*/ "r"(&(_lval)) \
|
|
|
|
: /*trash*/ "t0", "t1", "memory" \
|
|
|
|
)
|
|
|
|
Index: valgrind/VEX/priv/guest_mips_toIR.c
|
|
|
|
===================================================================
|
|
|
|
--- valgrind/VEX/priv/guest_mips_toIR.c (revision 3206)
|
|
|
|
+++ valgrind/VEX/priv/guest_mips_toIR.c (working copy)
|
|
|
|
@@ -16794,6 +16794,7 @@
|
|
|
|
mkU64(0x0) : mkU32(0x0)))), imm);
|
|
|
|
break;
|
|
|
|
|
|
|
|
+#if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev < 6))
|
|
|
|
case 0x08: { /* ADDI */
|
|
|
|
DIP("addi r%u, r%u, %u", rt, rs, imm);
|
|
|
|
IRTemp tmpRs32 = newTemp(Ity_I32);
|
|
|
|
@@ -16831,6 +16832,8 @@
|
|
|
|
putIReg(rt, mkWidenFrom32(ty, mkexpr(t0), True));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
case 0x09: /* ADDIU */
|
|
|
|
DIP("addiu r%u, r%u, %u", rt, rs, imm);
|
|
|
|
if (mode64) {
|
|
|
|
@@ -16888,7 +16891,8 @@
|
|
|
|
mkU32(extend_s_16to32(imm)))));
|
|
|
|
break;
|
|
|
|
|
|
|
|
- case 0x18: { /* Doubleword Add Immidiate - DADD; MIPS64 */
|
|
|
|
+#if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev < 6))
|
|
|
|
+ case 0x18: { /* Doubleword Add Immidiate - DADDI; MIPS64 */
|
|
|
|
DIP("daddi r%u, r%u, %u", rt, rs, imm);
|
|
|
|
IRTemp tmpRs64 = newTemp(Ity_I64);
|
|
|
|
assign(tmpRs64, getIReg(rs));
|
|
|
|
@@ -16926,6 +16930,7 @@
|
|
|
|
putIReg(rt, mkexpr(t0));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
case 0x19: /* Doubleword Add Immidiate Unsigned - DADDIU; MIPS64 */
|
|
|
|
DIP("daddiu r%u, r%u, %u", rt, rs, imm);
|