olista01 added inline comments. ================ Comment at: src/UnwindRegistersRestore.S:325-336 @@ -324,5 +324,14 @@ DEFINE_LIBUNWIND_PRIVATE_FUNCTION(_ZN9libunwind13Registers_arm20restoreCoreAndJumpToEv) -#if !defined(__ARM_ARCH_ISA_ARM) - ldr r2, [r0, #52] - ldr r3, [r0, #60] +#if !defined(__ARM_ARCH_ISA_ARM) && __ARM_ARCH_ISA_THUMB == 1 + @ r8-r11: ldm into r1-r4, then mov to r8-r11 + add r0, #0x20 + ldm r0!, {r1-r4} + sub r0, #0x30 + mov r8, r1 + mov r9, r2 + mov r10, r3 + mov r11, r4 + @ r12 does not need loading, it it the intra-procedure-call scratch register + ldr r2, [r0, #0x34] + ldr r3, [r0, #0x3c] mov sp, r2 ---------------- > Maybe we should have three implementations?
Previously, we had two implementations: * The first one is used for all thumb-only targets, but is only valid thumb2 code, and doesn't save the high registers * The second one is ARM code used for all targets that have ARM (despite the comment about thumb2) Now we have: * The first one is used for Thumb1-only targets * The second one is used for targets that have Thumb2 or ARM, and assembles as either ISA (with a preference for ARM, if that is available) https://reviews.llvm.org/D22292 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits