forked from OSchip/llvm-project
[Builtins] Fix div0 error in udivsi3
Summary: Need to save `lr` before bl to aeabi_div0 Reviewers: rengolin, compnerd Reviewed By: compnerd Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D31716 llvm-svn: 299628
This commit is contained in:
parent
f7298b0ef0
commit
fbe67da29b
|
@ -37,7 +37,16 @@ DEFINE_COMPILERRT_FUNCTION(__udivsi3)
|
||||||
beq LOCAL_LABEL(divby0)
|
beq LOCAL_LABEL(divby0)
|
||||||
udiv r0, r0, r1
|
udiv r0, r0, r1
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
|
LOCAL_LABEL(divby0):
|
||||||
|
mov r0, #0
|
||||||
|
# ifdef __ARM_EABI__
|
||||||
|
b __aeabi_idiv0
|
||||||
# else
|
# else
|
||||||
|
JMP(lr)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else /* ! __ARM_ARCH_EXT_IDIV__ */
|
||||||
cmp r1, #1
|
cmp r1, #1
|
||||||
bcc LOCAL_LABEL(divby0)
|
bcc LOCAL_LABEL(divby0)
|
||||||
#if __ARM_ARCH_ISA_THUMB == 1
|
#if __ARM_ARCH_ISA_THUMB == 1
|
||||||
|
@ -186,9 +195,12 @@ LOCAL_LABEL(skip_1):
|
||||||
LOCAL_LABEL(divby0):
|
LOCAL_LABEL(divby0):
|
||||||
movs r0, #0
|
movs r0, #0
|
||||||
# if defined(__ARM_EABI__)
|
# if defined(__ARM_EABI__)
|
||||||
|
push {r7, lr}
|
||||||
bl __aeabi_idiv0 // due to relocation limit, can't use b.
|
bl __aeabi_idiv0 // due to relocation limit, can't use b.
|
||||||
# endif
|
pop {r7, pc}
|
||||||
|
# else
|
||||||
JMP(lr)
|
JMP(lr)
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
#if __ARM_ARCH_ISA_THUMB == 1
|
#if __ARM_ARCH_ISA_THUMB == 1
|
||||||
|
@ -252,16 +264,6 @@ LOCAL_LABEL(div0block):
|
||||||
JMP(lr)
|
JMP(lr)
|
||||||
#endif /* __ARM_ARCH_EXT_IDIV__ */
|
#endif /* __ARM_ARCH_EXT_IDIV__ */
|
||||||
|
|
||||||
#if __ARM_ARCH_EXT_IDIV__
|
|
||||||
LOCAL_LABEL(divby0):
|
|
||||||
mov r0, #0
|
|
||||||
# ifdef __ARM_EABI__
|
|
||||||
b __aeabi_idiv0
|
|
||||||
# else
|
|
||||||
JMP(lr)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
END_COMPILERRT_FUNCTION(__udivsi3)
|
END_COMPILERRT_FUNCTION(__udivsi3)
|
||||||
|
|
||||||
NO_EXEC_STACK_DIRECTIVE
|
NO_EXEC_STACK_DIRECTIVE
|
||||||
|
|
Loading…
Reference in New Issue