summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYunQiang Su <wzssyqa@gmail.com>2018-01-03 10:07:41 +0800
committerGitHub <noreply@github.com>2018-01-03 10:07:41 +0800
commit746dbe3a6a79a41931c03b51df2972be4d5e5028 (patch)
tree11274b3c81030b7decf1589f6595f18bce54c78b
parentc50ba182f43537e29dd92cfd9b2fa7a30549a06e (diff)
downloadlibffi-746dbe3a6a79a41931c03b51df2972be4d5e5028.tar.gz
mips/ffi.c: fix encoding for jr on r6
mips/ffi.c: instruction jr has a different encoding for r6
-rw-r--r--src/mips/ffi.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mips/ffi.c b/src/mips/ffi.c
index 33697cb..aa3e522 100644
--- a/src/mips/ffi.c
+++ b/src/mips/ffi.c
@@ -715,7 +715,11 @@ ffi_prep_closure_loc (ffi_closure *closure,
/* lui $12,high(codeloc) */
tramp[2] = 0x3c0c0000 | ((unsigned)codeloc >> 16);
/* jr $25 */
+#if !defined(__mips_isa_rev) || (__mips_isa_rev<6)
tramp[3] = 0x03200008;
+#else
+ tramp[3] = 0x03200009;
+#endif
/* ori $12,low(codeloc) */
tramp[4] = 0x358c0000 | ((unsigned)codeloc & 0xffff);
#else
@@ -743,7 +747,11 @@ ffi_prep_closure_loc (ffi_closure *closure,
/* ori $25,low(fn) */
tramp[10] = 0x37390000 | ((unsigned long)fn & 0xffff);
/* jr $25 */
+#if !defined(__mips_isa_rev) || (__mips_isa_rev<6)
tramp[11] = 0x03200008;
+#else
+ tramp[11] = 0x03200009;
+#endif
/* ori $12,low(codeloc) */
tramp[12] = 0x358c0000 | ((unsigned long)codeloc & 0xffff);