[MIPS] Modify PTR_* macros for mips32r6/mips64r6
Commit Message
This patch modifies some PTR_* macro definitions for mips32r6 and mips64r6.
It uses addu/subu instructions for pointer arithmetic as these operations do
not trap on mips32r6/mips64r6 whereas the add/sub instructions do trap.
Tested with the mips32r6/mips64r6 GCC, binutils and qemu simulator.
OK to checkin?
Steve Ellcey
sellcey@imgtec.com
2014-12-19 Steve Ellcey <sellcey@imgtec.com>
* sysdeps/mips/sys/asm.h (PTR_ADDU): Use addu on mips32r6/mips64r6.
(PTR_ADDIU): Use addiu for mips32r6/mips64r6.
(PTR_SUBU): Use subu for mips32r6/mips64r6.
(PTR_SUBIU): Use subu for mips32r6/mips64r6 (subiu does not exist).
* sysdeps/mips/machine-gmon.h (PTR_ADDU_STRING) Use addu for
mips32r6/mips64r6.
(PTR_SUBU_STRING) Use subu for mips32r6/mips64r6.
Comments
On Fri, 19 Dec 2014, Steve Ellcey wrote:
> This patch modifies some PTR_* macro definitions for mips32r6 and mips64r6.
> It uses addu/subu instructions for pointer arithmetic as these operations do
> not trap on mips32r6/mips64r6 whereas the add/sub instructions do trap.
>
> Tested with the mips32r6/mips64r6 GCC, binutils and qemu simulator.
>
> OK to checkin?
OK.
@@ -83,8 +83,13 @@ static void __attribute_used__ __mcount (u_long frompc, u_long selfpc)
#endif
#if _MIPS_SIM == _ABIN32
-# define PTR_ADDU_STRING "add" /* no u */
-# define PTR_SUBU_STRING "sub" /* no u */
+# if __mips_isa_rev < 6
+# define PTR_ADDU_STRING "add" /* no u */
+# define PTR_SUBU_STRING "sub" /* no u */
+# else
+# define PTR_ADDU_STRING "addu"
+# define PTR_SUBU_STRING "subu"
+# endif
#elif _MIPS_SIM == _ABI64
# define PTR_ADDU_STRING "daddu"
# define PTR_SUBU_STRING "dsubu"
@@ -416,12 +416,19 @@ symbol = value
#if _MIPS_SIM == _ABIN32
# define PTR_ADD add
# define PTR_ADDI addi
-# define PTR_ADDU add /* no u */
-# define PTR_ADDIU addi /* no u */
# define PTR_SUB sub
# define PTR_SUBI subi
+#if __mips_isa_rev < 6
+# define PTR_ADDU add /* no u */
+# define PTR_ADDIU addi /* no u */
# define PTR_SUBU sub /* no u */
# define PTR_SUBIU sub /* no u */
+#else
+# define PTR_ADDU addu
+# define PTR_ADDIU addiu
+# define PTR_SUBU subu
+# define PTR_SUBIU subu
+#endif
# define PTR_L lw
# define PTR_LA la
# define PTR_S sw