[llvm] r268173 - [ORC] Save AArch64 NEON state in the JIT reentry block.
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 30 17:14:46 PDT 2016
Author: lhames
Date: Sat Apr 30 19:14:45 2016
New Revision: 268173
URL: http://llvm.org/viewvc/llvm-project?rev=268173&view=rev
Log:
[ORC] Save AArch64 NEON state in the JIT reentry block.
The earlier version of the resolver code did not save NEON state, so it would
have broken any callees that used floating point.
Modified:
llvm/trunk/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h
llvm/trunk/lib/ExecutionEngine/Orc/OrcArchitectureSupport.cpp
Modified: llvm/trunk/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h?rev=268173&r1=268172&r2=268173&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h (original)
+++ llvm/trunk/include/llvm/ExecutionEngine/Orc/OrcArchitectureSupport.h Sat Apr 30 19:14:45 2016
@@ -111,7 +111,7 @@ class OrcAArch64 {
public:
static const unsigned PointerSize = 8;
static const unsigned TrampolineSize = 12;
- static const unsigned ResolverCodeSize = 0xA0;
+ static const unsigned ResolverCodeSize = 0x120;
typedef GenericIndirectStubsInfo<8> IndirectStubsInfo;
Modified: llvm/trunk/lib/ExecutionEngine/Orc/OrcArchitectureSupport.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ExecutionEngine/Orc/OrcArchitectureSupport.cpp?rev=268173&r1=268172&r2=268173&view=diff
==============================================================================
--- llvm/trunk/lib/ExecutionEngine/Orc/OrcArchitectureSupport.cpp (original)
+++ llvm/trunk/lib/ExecutionEngine/Orc/OrcArchitectureSupport.cpp Sat Apr 30 19:14:45 2016
@@ -19,50 +19,82 @@ void OrcAArch64::writeResolverCode(uint8
const uint32_t ResolverCode[] = {
// resolver_entry:
- 0xa9bf47fd, // 0x00: stp x29, x17, [sp, #-16]!
- 0x910003fd, // 0x04: mov x29, sp
- 0xa9bf73fb, // 0x08: stp x27, x28, [sp, #-16]!
- 0xa9bf6bf9, // 0x0C: stp x25, x26, [sp, #-16]!
- 0xa9bf63f7, // 0x10: stp x23, x24, [sp, #-16]!
- 0xa9bf5bf5, // 0x14: stp x21, x22, [sp, #-16]!
- 0xa9bf53f3, // 0x18: stp x19, x20, [sp, #-16]!
- 0xa9bf3fee, // 0x1C: stp x14, x15, [sp, #-16]!
- 0xa9bf37ec, // 0x20: stp x12, x13, [sp, #-16]!
- 0xa9bf2fea, // 0x24: stp x10, x11, [sp, #-16]!
- 0xa9bf27e8, // 0x28: stp x8, x9, [sp, #-16]!
- 0xa9bf1fe6, // 0x2C: stp x6, x7, [sp, #-16]!
- 0xa9bf17e4, // 0x30: stp x4, x5, [sp, #-16]!
- 0xa9bf0fe2, // 0x34: stp x2, x3, [sp, #-16]!
- 0xa9bf07e0, // 0x38: stp x0, x1, [sp, #-16]!
- 0x580002e0, // 0x3C: ldr x0, Lcallback_mgr
- 0xaa1e03e1, // 0x40: mov x1, x30
- 0xd1003021, // 0x44: sub x1, x1, #12
- 0x58000242, // 0x48: ldr x2, Lreentry_fn
- 0xd63f0040, // 0x4C: blr x2
- 0xaa0003f1, // 0x50: mov x17, x0
- 0xa8c107e0, // 0x54: ldp x0, x1, [sp], #16
- 0xa8c10fe2, // 0x58: ldp x2, x3, [sp], #16
- 0xa8c117e4, // 0x5C: ldp x4, x5, [sp], #16
- 0xa8c11fe6, // 0x60: ldp x6, x7, [sp], #16
- 0xa8c127e8, // 0x64: ldp x8, x9, [sp], #16
- 0xa8c12fea, // 0x68: ldp x10, x11, [sp], #16
- 0xa8c137ec, // 0x6C: ldp x12, x13, [sp], #16
- 0xa8c13fee, // 0x70: ldp x14, x15, [sp], #16
- 0xa8c153f3, // 0x74: ldp x19, x20, [sp], #16
- 0xa8c15bf5, // 0x78: ldp x21, x22, [sp], #16
- 0xa8c163f7, // 0x7C: ldp x23, x24, [sp], #16
- 0xa8c16bf9, // 0x80: ldp x25, x26, [sp], #16
- 0xa8c173fb, // 0x84: ldp x27, x28, [sp], #16
- 0xa8c17bfd, // 0x88: ldp x29, x30, [sp], #16
- 0xd65f0220, // 0x8C: ret x17
- 0x00000000, // 0x90: Lresolver_fn:
- 0x00000000, // .quad resolver_fn
- 0x00000000, // 0x98: Lcallback_mgr:
- 0x00000000, // .quad callback_mgr
+ 0xa9bf47fd, // 0x000: stp x29, x17, [sp, #-16]!
+ 0x910003fd, // 0x004: mov x29, sp
+ 0xa9bf73fb, // 0x008: stp x27, x28, [sp, #-16]!
+ 0xa9bf6bf9, // 0x00c: stp x25, x26, [sp, #-16]!
+ 0xa9bf63f7, // 0x010: stp x23, x24, [sp, #-16]!
+ 0xa9bf5bf5, // 0x014: stp x21, x22, [sp, #-16]!
+ 0xa9bf53f3, // 0x018: stp x19, x20, [sp, #-16]!
+ 0xa9bf3fee, // 0x01c: stp x14, x15, [sp, #-16]!
+ 0xa9bf37ec, // 0x020: stp x12, x13, [sp, #-16]!
+ 0xa9bf2fea, // 0x024: stp x10, x11, [sp, #-16]!
+ 0xa9bf27e8, // 0x028: stp x8, x9, [sp, #-16]!
+ 0xa9bf1fe6, // 0x02c: stp x6, x7, [sp, #-16]!
+ 0xa9bf17e4, // 0x030: stp x4, x5, [sp, #-16]!
+ 0xa9bf0fe2, // 0x034: stp x2, x3, [sp, #-16]!
+ 0xa9bf07e0, // 0x038: stp x0, x1, [sp, #-16]!
+ 0xadbf7ffe, // 0x03c: stp q30, q31, [sp, #-32]!
+ 0xadbf77fc, // 0x040: stp q28, q29, [sp, #-32]!
+ 0xadbf6ffa, // 0x044: stp q26, q27, [sp, #-32]!
+ 0xadbf67f8, // 0x048: stp q24, q25, [sp, #-32]!
+ 0xadbf5ff6, // 0x04c: stp q22, q23, [sp, #-32]!
+ 0xadbf57f4, // 0x050: stp q20, q21, [sp, #-32]!
+ 0xadbf4ff2, // 0x054: stp q18, q19, [sp, #-32]!
+ 0xadbf47f0, // 0x058: stp q16, q17, [sp, #-32]!
+ 0xadbf3fee, // 0x05c: stp q14, q15, [sp, #-32]!
+ 0xadbf37ec, // 0x060: stp q12, q13, [sp, #-32]!
+ 0xadbf2fea, // 0x064: stp q10, q11, [sp, #-32]!
+ 0xadbf27e8, // 0x068: stp q8, q9, [sp, #-32]!
+ 0xadbf1fe6, // 0x06c: stp q6, q7, [sp, #-32]!
+ 0xadbf17e4, // 0x070: stp q4, q5, [sp, #-32]!
+ 0xadbf0fe2, // 0x074: stp q2, q3, [sp, #-32]!
+ 0xadbf07e0, // 0x078: stp q0, q1, [sp, #-32]!
+ 0x580004e0, // 0x07c: ldr x0, Lcallbackmgr
+ 0xaa1e03e1, // 0x080: mov x1, x30
+ 0xd1003021, // 0x084: sub x1, x1, #12
+ 0x58000442, // 0x088: ldr x2, Lreentry_fn_ptr
+ 0xd63f0040, // 0x08c: blr x2
+ 0xaa0003f1, // 0x090: mov x17, x0
+ 0xacc107e0, // 0x094: ldp q0, q1, [sp], #32
+ 0xacc10fe2, // 0x098: ldp q2, q3, [sp], #32
+ 0xacc117e4, // 0x09c: ldp q4, q5, [sp], #32
+ 0xacc11fe6, // 0x0a0: ldp q6, q7, [sp], #32
+ 0xacc127e8, // 0x0a4: ldp q8, q9, [sp], #32
+ 0xacc12fea, // 0x0a8: ldp q10, q11, [sp], #32
+ 0xacc137ec, // 0x0ac: ldp q12, q13, [sp], #32
+ 0xacc13fee, // 0x0b0: ldp q14, q15, [sp], #32
+ 0xacc147f0, // 0x0b4: ldp q16, q17, [sp], #32
+ 0xacc14ff2, // 0x0b8: ldp q18, q19, [sp], #32
+ 0xacc157f4, // 0x0bc: ldp q20, q21, [sp], #32
+ 0xacc15ff6, // 0x0c0: ldp q22, q23, [sp], #32
+ 0xacc167f8, // 0x0c4: ldp q24, q25, [sp], #32
+ 0xacc16ffa, // 0x0c8: ldp q26, q27, [sp], #32
+ 0xacc177fc, // 0x0cc: ldp q28, q29, [sp], #32
+ 0xacc17ffe, // 0x0d0: ldp q30, q31, [sp], #32
+ 0xa8c107e0, // 0x0d4: ldp x0, x1, [sp], #16
+ 0xa8c10fe2, // 0x0d8: ldp x2, x3, [sp], #16
+ 0xa8c117e4, // 0x0dc: ldp x4, x5, [sp], #16
+ 0xa8c11fe6, // 0x0e0: ldp x6, x7, [sp], #16
+ 0xa8c127e8, // 0x0e4: ldp x8, x9, [sp], #16
+ 0xa8c12fea, // 0x0e8: ldp x10, x11, [sp], #16
+ 0xa8c137ec, // 0x0ec: ldp x12, x13, [sp], #16
+ 0xa8c13fee, // 0x0f0: ldp x14, x15, [sp], #16
+ 0xa8c153f3, // 0x0f4: ldp x19, x20, [sp], #16
+ 0xa8c15bf5, // 0x0f8: ldp x21, x22, [sp], #16
+ 0xa8c163f7, // 0x0fc: ldp x23, x24, [sp], #16
+ 0xa8c16bf9, // 0x100: ldp x25, x26, [sp], #16
+ 0xa8c173fb, // 0x104: ldp x27, x28, [sp], #16
+ 0xa8c17bfd, // 0x108: ldp x29, x30, [sp], #16
+ 0xd65f0220, // 0x10c: ret x17
+ 0x01234567, // 0x110: Lreentry_fn_ptr:
+ 0xdeadbeef, // 0x114: .quad 0
+ 0x98765432, // 0x118: Lcallbackmgr:
+ 0xcafef00d // 0x11c: .quad 0
};
- const unsigned ReentryFnAddrOffset = 0x90;
- const unsigned CallbackMgrAddrOffset = 0x98;
+ const unsigned ReentryFnAddrOffset = 0x110;
+ const unsigned CallbackMgrAddrOffset = 0x118;
memcpy(ResolverMem, ResolverCode, sizeof(ResolverCode));
memcpy(ResolverMem + ReentryFnAddrOffset, &ReentryFn, sizeof(ReentryFn));
More information about the llvm-commits
mailing list