forked from len0rd/rockbox
Use long jump to reach __div0 from udiv32_arm if building with IRAM and without EABI.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24152 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
c1f4d4037a
commit
686c4e53ce
1 changed files with 11 additions and 0 deletions
|
|
@ -128,8 +128,19 @@ udiv32_arm:
|
||||||
adr r2, .L_udiv32_div0_trap
|
adr r2, .L_udiv32_div0_trap
|
||||||
cmp r2, lr
|
cmp r2, lr
|
||||||
subeq sp, sp, #4
|
subeq sp, sp, #4
|
||||||
|
#if defined(__ARM_EABI__) || !defined(USE_IRAM)
|
||||||
bleq __div0
|
bleq __div0
|
||||||
|
#else
|
||||||
|
ldr r3, =__div0
|
||||||
|
moveq lr, pc
|
||||||
|
bxeq r3
|
||||||
|
#endif
|
||||||
/* Otherwise, push lr to the stack before calling __div0 */
|
/* Otherwise, push lr to the stack before calling __div0 */
|
||||||
stmdb sp!, { lr }
|
stmdb sp!, { lr }
|
||||||
|
#if defined(__ARM_EABI__) || !defined(USE_IRAM)
|
||||||
bl __div0
|
bl __div0
|
||||||
|
#else
|
||||||
|
mov lr, pc
|
||||||
|
bx r3
|
||||||
|
#endif
|
||||||
.size udiv32_arm, . - udiv32_arm
|
.size udiv32_arm, . - udiv32_arm
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue