0003-mips-replace-addi-with-addiu.patch 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. mips: replace addi with addiu
  2. ADDI instruction has been removed in R6 so let's use ADDIU instead.
  3. This patch has been sent upstream:
  4. https://bugs.kde.org/show_bug.cgi?id=356112
  5. Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
  6. Index: valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S
  7. ===================================================================
  8. --- valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S (revision 15740)
  9. +++ valgrind/coregrind/m_dispatch/dispatch-mips32-linux.S (working copy)
  10. @@ -196,7 +196,7 @@
  11. addu $13, $13, $14
  12. lw $12, 0($13) /* t3 = VG_(tt_fast)[hash] :: ULong* */
  13. - addi $13, $13, 4
  14. + addiu $13, $13, 4
  15. lw $25, 0($13) /* little-endian, so comparing 1st 32bit word */
  16. nop
  17. Index: valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S
  18. ===================================================================
  19. --- valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S (revision 15740)
  20. +++ valgrind/coregrind/m_dispatch/dispatch-mips64-linux.S (working copy)
  21. @@ -196,7 +196,7 @@
  22. daddu $13, $13, $14
  23. ld $12, 0($13) /* t3 = VG_(tt_fast)[hash] :: ULong* */
  24. - daddi $13, $13, 8
  25. + daddiu $13, $13, 8
  26. ld $25, 0($13) /* little-endian, so comparing 1st 32bit word */
  27. nop
  28. Index: valgrind/coregrind/m_libcsetjmp.c
  29. ===================================================================
  30. --- valgrind/coregrind/m_libcsetjmp.c (revision 15740)
  31. +++ valgrind/coregrind/m_libcsetjmp.c (working copy)
  32. @@ -594,7 +594,7 @@
  33. /* Checking whether second argument is zero. */
  34. " bnez $a1, 1f \n\t"
  35. " nop \n\t"
  36. -" addi $a1, $a1, 1 \n\t" /* We must return 1 if val=0. */
  37. +" addiu $a1, $a1, 1 \n\t" /* We must return 1 if val=0. */
  38. "1: \n\t"
  39. " move $v0, $a1 \n\t" /* Return value of second argument. */
  40. " j $ra \n\t"
  41. Index: valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c
  42. ===================================================================
  43. --- valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c (revision 15740)
  44. +++ valgrind/coregrind/m_syswrap/syswrap-mips64-linux.c (working copy)
  45. @@ -173,7 +173,7 @@
  46. " ld $30, 8($29)\n"
  47. " ld $28, 16($29)\n"
  48. " jr $31\n"
  49. -" daddi $29,$29, 32\n"
  50. +" daddiu $29,$29, 32\n"
  51. ".previous\n"
  52. );
  53. Index: valgrind/coregrind/m_trampoline.S
  54. ===================================================================
  55. --- valgrind/coregrind/m_trampoline.S (revision 15740)
  56. +++ valgrind/coregrind/m_trampoline.S (working copy)
  57. @@ -1254,8 +1254,8 @@
  58. //la $a0, string
  59. j strlen_cond
  60. strlen_loop:
  61. - addi $v0, $v0, 1
  62. - addi $a0, $a0, 1
  63. + addiu $v0, $v0, 1
  64. + addiu $a0, $a0, 1
  65. strlen_cond:
  66. lbu $t0, ($a0)
  67. bne $t0, $zero, strlen_loop
  68. Index: valgrind/helgrind/tests/tc08_hbl2.c
  69. ===================================================================
  70. --- valgrind/helgrind/tests/tc08_hbl2.c (revision 15740)
  71. +++ valgrind/helgrind/tests/tc08_hbl2.c (working copy)
  72. @@ -125,11 +125,11 @@
  73. # define INC(_lval,_lqual) \
  74. __asm__ __volatile__ ( \
  75. "L1xyzzy1" _lqual":\n" \
  76. - " move $t0, %0\n" \
  77. - " ll $t1, 0($t0)\n" \
  78. - " addi $t1, $t1, 1\n" \
  79. - " sc $t1, 0($t0)\n" \
  80. - " beqz $t1, L1xyzzy1" _lqual \
  81. + " move $t0, %0\n" \
  82. + " ll $t1, 0($t0)\n" \
  83. + " addiu $t1, $t1, 1\n" \
  84. + " sc $t1, 0($t0)\n" \
  85. + " beqz $t1, L1xyzzy1" _lqual \
  86. : /*out*/ : /*in*/ "r"(&(_lval)) \
  87. : /*trash*/ "t0", "t1", "memory" \
  88. )
  89. Index: valgrind/VEX/priv/guest_mips_toIR.c
  90. ===================================================================
  91. --- valgrind/VEX/priv/guest_mips_toIR.c (revision 3206)
  92. +++ valgrind/VEX/priv/guest_mips_toIR.c (working copy)
  93. @@ -16794,6 +16794,7 @@
  94. mkU64(0x0) : mkU32(0x0)))), imm);
  95. break;
  96. +#if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev < 6))
  97. case 0x08: { /* ADDI */
  98. DIP("addi r%u, r%u, %u", rt, rs, imm);
  99. IRTemp tmpRs32 = newTemp(Ity_I32);
  100. @@ -16831,6 +16832,8 @@
  101. putIReg(rt, mkWidenFrom32(ty, mkexpr(t0), True));
  102. break;
  103. }
  104. +#endif
  105. +
  106. case 0x09: /* ADDIU */
  107. DIP("addiu r%u, r%u, %u", rt, rs, imm);
  108. if (mode64) {
  109. @@ -16888,7 +16891,8 @@
  110. mkU32(extend_s_16to32(imm)))));
  111. break;
  112. - case 0x18: { /* Doubleword Add Immidiate - DADD; MIPS64 */
  113. +#if defined(__mips__) && ((defined(__mips_isa_rev) && __mips_isa_rev < 6))
  114. + case 0x18: { /* Doubleword Add Immidiate - DADDI; MIPS64 */
  115. DIP("daddi r%u, r%u, %u", rt, rs, imm);
  116. IRTemp tmpRs64 = newTemp(Ity_I64);
  117. assign(tmpRs64, getIReg(rs));
  118. @@ -16926,6 +16930,7 @@
  119. putIReg(rt, mkexpr(t0));
  120. break;
  121. }
  122. +#endif
  123. case 0x19: /* Doubleword Add Immidiate Unsigned - DADDIU; MIPS64 */
  124. DIP("daddiu r%u, r%u, %u", rt, rs, imm);