aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2019-01-12 11:12:08 +0000
committerSimon Atanasyan <simon@atanasyan.com>2019-01-12 11:12:08 +0000
commitc3e5232f2b8d978fe47791c08bdfb11f45da4e32 (patch)
treee37a457f99b2e30e7dae5fb88c31484f40961204
parent06ac862fa695eeffc3bbc1919476e1b343242687 (diff)
[ORC][MIPS] Fill delay-slot after `jr` instruction
MIPS `jr` instruction uses a delay-slot. To escape execution of arbitrary instruction we should either fill the delay-slot by `nop` instruction or swap `jr` instruction and logically preceding instruction. This fix implements the second method to generate a bit more effective code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351001 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/ExecutionEngine/Orc/OrcABISupport.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/lib/ExecutionEngine/Orc/OrcABISupport.cpp b/lib/ExecutionEngine/Orc/OrcABISupport.cpp
index 3f513e42ef0..aa405554242 100644
--- a/lib/ExecutionEngine/Orc/OrcABISupport.cpp
+++ b/lib/ExecutionEngine/Orc/OrcABISupport.cpp
@@ -610,13 +610,13 @@ void OrcMips32_Base::writeResolverCode(uint8_t *ResolverMem,
0x8fa40008, // 0xe8: lw $a0,8($sp)
0x27bd0068, // 0xec: addiu $sp,$sp,104
0x0300f825, // 0xf0: move $ra, $t8
- 0x00000000, // 0xf4: move $t9, $v0/v1
- 0x03200008 // 0xf8: jr $t9
+ 0x03200008, // 0xf4: jr $t9
+ 0x00000000, // 0xf8: move $t9, $v0/v1
};
const unsigned ReentryFnAddrOffset = 0x7c; // JIT re-entry fn addr lui
const unsigned CallbackMgrAddrOffset = 0x6c; // Callback manager addr lui
- const unsigned Offsett = 0xf4;
+ const unsigned Offsett = 0xf8;
memcpy(ResolverMem, ResolverCode, sizeof(ResolverCode));
@@ -810,8 +810,8 @@ void OrcMips64::writeResolverCode(uint8_t *ResolverMem, JITReentryFn ReentryFn,
0xdfa30008, // 0x10c: ld v1, 8(sp)
0x67bd00d0, // 0x110: daddiu $sp,$sp,208
0x0300f825, // 0x114: move $ra, $t8
- 0x0040c825, // 0x118: move $t9, $v0
- 0x03200008 // 0x11c: jr $t9
+ 0x03200008, // 0x118: jr $t9
+ 0x0040c825, // 0x11c: move $t9, $v0
};
const unsigned ReentryFnAddrOffset = 0x8c; // JIT re-entry fn addr lui