Adapt assembler syntax to eliminate Clang errors. (LLVM 14.0.0) (#798)
Co-authored-by: jeremyd <>
This commit is contained in:
parent
e1c5fd34e4
commit
f260477802
@ -103,7 +103,7 @@ regular_func div_s32s32
|
|||||||
regular_func divmod_s32s32
|
regular_func divmod_s32s32
|
||||||
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
||||||
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
ldr r3, [r2, #SIO_DIV_CSR_OFFSET]
|
ldr r3, [r2, #SIO_DIV_CSR_OFFSET]
|
||||||
lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
||||||
bcs divmod_s32s32_savestate
|
bcs divmod_s32s32_savestate
|
||||||
@ -114,7 +114,7 @@ regular_func divmod_s32s32_unsafe
|
|||||||
// are the hardware_divider functions that can be used instead anyway
|
// are the hardware_divider functions that can be used instead anyway
|
||||||
regular_func divmod_s32s32_unsafe
|
regular_func divmod_s32s32_unsafe
|
||||||
// to avoid worrying about IRQs (or context switches), simply disable interrupts around call
|
// to avoid worrying about IRQs (or context switches), simply disable interrupts around call
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
mrs r3, PRIMASK
|
mrs r3, PRIMASK
|
||||||
cpsid i
|
cpsid i
|
||||||
#endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */
|
#endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */
|
||||||
@ -167,7 +167,7 @@ wrapper_func __aeabi_uidiv
|
|||||||
wrapper_func __aeabi_uidivmod
|
wrapper_func __aeabi_uidivmod
|
||||||
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
||||||
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
ldr r3, [r2, #SIO_DIV_CSR_OFFSET]
|
ldr r3, [r2, #SIO_DIV_CSR_OFFSET]
|
||||||
lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
lsrs r3, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
||||||
bcs divmod_u32u32_savestate
|
bcs divmod_u32u32_savestate
|
||||||
@ -178,7 +178,7 @@ regular_func divmod_u32u32_unsafe
|
|||||||
// are the hardware_divider functions that can be used instead anyway
|
// are the hardware_divider functions that can be used instead anyway
|
||||||
regular_func divmod_u32u32_unsafe
|
regular_func divmod_u32u32_unsafe
|
||||||
// to avoid worrying about IRQs (or context switches), simply disable interrupts around call
|
// to avoid worrying about IRQs (or context switches), simply disable interrupts around call
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
mrs r3, PRIMASK
|
mrs r3, PRIMASK
|
||||||
cpsid i
|
cpsid i
|
||||||
#endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */
|
#endif /* !PICO_DIVIDER_DISABLE_INTERRUPTS */
|
||||||
@ -227,7 +227,7 @@ regular_func divmod_s64s64
|
|||||||
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
||||||
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
||||||
mov ip, r2
|
mov ip, r2
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
ldr r2, [r2, #SIO_DIV_CSR_OFFSET]
|
ldr r2, [r2, #SIO_DIV_CSR_OFFSET]
|
||||||
lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
||||||
mov r2, ip
|
mov r2, ip
|
||||||
@ -255,7 +255,7 @@ regular_func divmod_u64u64
|
|||||||
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
#if !PICO_DIVIDER_DISABLE_INTERRUPTS
|
||||||
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
// to support IRQ usage (or context switch) we must save/restore divider state around call if state is dirty
|
||||||
mov ip, r2
|
mov ip, r2
|
||||||
ldr r2, =(SIO_BASE)
|
ldr r2, =SIO_BASE
|
||||||
ldr r2, [r2, #SIO_DIV_CSR_OFFSET]
|
ldr r2, [r2, #SIO_DIV_CSR_OFFSET]
|
||||||
lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
lsrs r2, #SIO_DIV_CSR_DIRTY_SHIFT_FOR_CARRY
|
||||||
mov r2, ip
|
mov r2, ip
|
||||||
@ -278,7 +278,7 @@ regular_func divmod_u64u64_savestate
|
|||||||
|
|
||||||
.macro dneg lo,hi
|
.macro dneg lo,hi
|
||||||
mvns \hi,\hi
|
mvns \hi,\hi
|
||||||
rsbs \lo,#0
|
negs \lo,\lo
|
||||||
bne l\@_1
|
bne l\@_1
|
||||||
adds \hi,#1
|
adds \hi,#1
|
||||||
l\@_1:
|
l\@_1:
|
||||||
@ -352,7 +352,7 @@ regular_func divmod_u64u64_unsafe
|
|||||||
cmp r2,#0
|
cmp r2,#0
|
||||||
beq 2f @ x==0?
|
beq 2f @ x==0?
|
||||||
mov r12,r7
|
mov r12,r7
|
||||||
ldr r7,=#SIO_BASE
|
ldr r7,=SIO_BASE
|
||||||
str r0,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
str r0,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
||||||
str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
||||||
movs r1,#0
|
movs r1,#0
|
||||||
@ -367,7 +367,7 @@ regular_func divmod_u64u64_unsafe
|
|||||||
cmp r0,#0 @ y==0?
|
cmp r0,#0 @ y==0?
|
||||||
beq 3f @ then pass 0 to __aeabi_ldiv0
|
beq 3f @ then pass 0 to __aeabi_ldiv0
|
||||||
udiv0:
|
udiv0:
|
||||||
ldr r0,=#0xffffffff
|
ldr r0,=0xffffffff
|
||||||
movs r1,r0 @ pass 2^64-1 to __aeabi_ldiv0
|
movs r1,r0 @ pass 2^64-1 to __aeabi_ldiv0
|
||||||
3:
|
3:
|
||||||
push {r14}
|
push {r14}
|
||||||
@ -402,7 +402,7 @@ y64:
|
|||||||
cmp r2,#0
|
cmp r2,#0
|
||||||
beq udiv0 @ x==0? exit as with y!=0 case above
|
beq udiv0 @ x==0? exit as with y!=0 case above
|
||||||
push {r7}
|
push {r7}
|
||||||
ldr r7,=#SIO_BASE
|
ldr r7,=SIO_BASE
|
||||||
str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
||||||
str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
str r2,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
||||||
wait_div 4
|
wait_div 4
|
||||||
@ -464,9 +464,9 @@ y64_x32:
|
|||||||
lsrs r4,r2,#15
|
lsrs r4,r2,#15
|
||||||
adds r4,#1 @ x1=(x0>>15)+1; 2^16<x1<=2^17
|
adds r4,#1 @ x1=(x0>>15)+1; 2^16<x1<=2^17
|
||||||
|
|
||||||
ldr r7,=#SIO_BASE
|
ldr r7,=SIO_BASE
|
||||||
str r4,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
str r4,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
||||||
ldr r4,=#0xffffffff
|
ldr r4,=0xffffffff
|
||||||
str r4,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
str r4,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
||||||
lsrs r6,r1,#16
|
lsrs r6,r1,#16
|
||||||
uxth r3,r2 @ x0l
|
uxth r3,r2 @ x0l
|
||||||
@ -687,9 +687,9 @@ y64_x48:
|
|||||||
adcs r4,r4
|
adcs r4,r4
|
||||||
adds r4,#1 @ x1=(ui32)(x0>>31)+1; // 2^16<x1<=2^17
|
adds r4,#1 @ x1=(ui32)(x0>>31)+1; // 2^16<x1<=2^17
|
||||||
|
|
||||||
ldr r7,=#SIO_BASE
|
ldr r7,=SIO_BASE
|
||||||
str r4,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
str r4,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
||||||
ldr r4,=#0xffffffff
|
ldr r4,=0xffffffff
|
||||||
str r4,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
str r4,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
||||||
lsrs r6,r1,#16
|
lsrs r6,r1,#16
|
||||||
wait_div 1
|
wait_div 1
|
||||||
@ -821,7 +821,7 @@ y64_x64:
|
|||||||
adds r5,r3,#1
|
adds r5,r3,#1
|
||||||
beq 1f
|
beq 1f
|
||||||
|
|
||||||
ldr r7,=#SIO_BASE
|
ldr r7,=SIO_BASE
|
||||||
str r5,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
str r5,[r7,#SIO_DIV_UDIVISOR_OFFSET]
|
||||||
str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
str r1,[r7,#SIO_DIV_UDIVIDEND_OFFSET]
|
||||||
wait_div 0
|
wait_div 0
|
||||||
|
@ -290,7 +290,7 @@ wrapper_func __aeabi_cdcmple
|
|||||||
wrapper_func __aeabi_cdcmpeq
|
wrapper_func __aeabi_cdcmpeq
|
||||||
push {r0-r7,r14}
|
push {r0-r7,r14}
|
||||||
__aeabi_dfcmple_guts:
|
__aeabi_dfcmple_guts:
|
||||||
ldr r7,=#0x7ff @ flush NaNs and denormals
|
ldr r7,=0x7ff @ flush NaNs and denormals
|
||||||
lsls r4,r1,#1
|
lsls r4,r1,#1
|
||||||
lsrs r4,#21
|
lsrs r4,#21
|
||||||
beq 1f
|
beq 1f
|
||||||
@ -450,7 +450,7 @@ wrapper_func __aeabi_i2d
|
|||||||
lsls r2, r4
|
lsls r2, r4
|
||||||
lsls r0, r2, #20
|
lsls r0, r2, #20
|
||||||
lsrs r2, #12
|
lsrs r2, #12
|
||||||
ldr r1,=#1055
|
ldr r1,=1055
|
||||||
subs r1, r4
|
subs r1, r4
|
||||||
lsls r1, #20
|
lsls r1, #20
|
||||||
orrs r1, r3
|
orrs r1, r3
|
||||||
@ -552,7 +552,7 @@ regular_func double2int64_z
|
|||||||
cmp r1, #0
|
cmp r1, #0
|
||||||
bmi 1f
|
bmi 1f
|
||||||
movs r2, #0
|
movs r2, #0
|
||||||
rsbs r0, #0
|
negs r0, r0
|
||||||
sbcs r2, r1
|
sbcs r2, r1
|
||||||
mov r1, r2
|
mov r1, r2
|
||||||
pop {pc}
|
pop {pc}
|
||||||
|
@ -144,7 +144,7 @@ l\@_2:
|
|||||||
lsls \re,#21
|
lsls \re,#21
|
||||||
bcc l\@_1 @ skip on positive
|
bcc l\@_1 @ skip on positive
|
||||||
mvns \rb,\rb @ negate mantissa
|
mvns \rb,\rb @ negate mantissa
|
||||||
rsbs \ra,#0
|
negs \ra,\ra
|
||||||
bcc l\@_1
|
bcc l\@_1
|
||||||
adds \rb,#1
|
adds \rb,#1
|
||||||
l\@_1:
|
l\@_1:
|
||||||
@ -218,7 +218,7 @@ da_pack:
|
|||||||
mvns r1,r1 @ negate mantissa
|
mvns r1,r1 @ negate mantissa
|
||||||
mvns r0,r0
|
mvns r0,r0
|
||||||
movs r2,#0
|
movs r2,#0
|
||||||
rsbs r4,#0
|
negs r4,r4
|
||||||
adcs r0,r2
|
adcs r0,r2
|
||||||
adcs r1,r2
|
adcs r1,r2
|
||||||
1:
|
1:
|
||||||
@ -263,7 +263,7 @@ da_3:
|
|||||||
da_7:
|
da_7:
|
||||||
@ here exponent overflow: return signed infinity
|
@ here exponent overflow: return signed infinity
|
||||||
lsls r1,r3,#31
|
lsls r1,r3,#31
|
||||||
ldr r3,=#0x7ff00000
|
ldr r3,=0x7ff00000
|
||||||
orrs r1,r3
|
orrs r1,r3
|
||||||
b 1f
|
b 1f
|
||||||
da_6:
|
da_6:
|
||||||
@ -524,7 +524,7 @@ double_section dmul_shim
|
|||||||
adcs r1,r1
|
adcs r1,r1
|
||||||
subs r3,#1 @ correct exponent
|
subs r3,#1 @ correct exponent
|
||||||
1:
|
1:
|
||||||
ldr r6,=#0x3ff
|
ldr r6,=0x3ff
|
||||||
subs r3,r6 @ correct for exponent bias
|
subs r3,r6 @ correct for exponent bias
|
||||||
lsls r6,#1 @ 0x7fe
|
lsls r6,#1 @ 0x7fe
|
||||||
cmp r3,r6
|
cmp r3,r6
|
||||||
@ -811,7 +811,7 @@ dd_1:
|
|||||||
muls r3,r0 @ zL*xH Q73
|
muls r3,r0 @ zL*xH Q73
|
||||||
subs r4,r3
|
subs r4,r3
|
||||||
mul32_32_64 r2,r0, r2,r3, r5,r6,r7,r2,r3 @ xL*zL
|
mul32_32_64 r2,r0, r2,r3, r5,r6,r7,r2,r3 @ xL*zL
|
||||||
rsbs r2,#0 @ borrow from low half?
|
negs r2,r2 @ borrow from low half?
|
||||||
sbcs r4,r3 @ y-xz Q73 (remainder bits 52..73)
|
sbcs r4,r3 @ y-xz Q73 (remainder bits 52..73)
|
||||||
|
|
||||||
cmp r4,#0
|
cmp r4,#0
|
||||||
@ -830,9 +830,9 @@ dd_2:
|
|||||||
mov r2,r12
|
mov r2,r12
|
||||||
lsls r7,r2,#31 @ result sign
|
lsls r7,r2,#31 @ result sign
|
||||||
asrs r2,#2 @ result exponent
|
asrs r2,#2 @ result exponent
|
||||||
ldr r3,=#0x3fd
|
ldr r3,=0x3fd
|
||||||
adds r2,r3
|
adds r2,r3
|
||||||
ldr r3,=#0x7fe
|
ldr r3,=0x7fe
|
||||||
cmp r2,r3
|
cmp r2,r3
|
||||||
bhs dd_3 @ over- or underflow?
|
bhs dd_3 @ over- or underflow?
|
||||||
lsls r2,#20
|
lsls r2,#20
|
||||||
@ -936,7 +936,7 @@ dq_0:
|
|||||||
b dq_4
|
b dq_4
|
||||||
|
|
||||||
dq_3:
|
dq_3:
|
||||||
ldr r1,=#0x7ff
|
ldr r1,=0x7ff
|
||||||
lsls r1,#20 @ return +Inf
|
lsls r1,#20 @ return +Inf
|
||||||
dq_4:
|
dq_4:
|
||||||
movs r0,#0
|
movs r0,#0
|
||||||
@ -949,7 +949,7 @@ regular_func dsqrt_shim
|
|||||||
bcs dq_0 @ negative?
|
bcs dq_0 @ negative?
|
||||||
lsrs r2,#21 @ extract exponent
|
lsrs r2,#21 @ extract exponent
|
||||||
subs r2,#1
|
subs r2,#1
|
||||||
ldr r3,=#0x7fe
|
ldr r3,=0x7fe
|
||||||
cmp r2,r3
|
cmp r2,r3
|
||||||
bhs dq_2 @ catches 0 and +Inf
|
bhs dq_2 @ catches 0 and +Inf
|
||||||
push {r4-r7,r14}
|
push {r4-r7,r14}
|
||||||
@ -968,8 +968,8 @@ regular_func dsqrt_shim
|
|||||||
@ here
|
@ here
|
||||||
@ r0:r1 y mantissa Q52 [1,4)
|
@ r0:r1 y mantissa Q52 [1,4)
|
||||||
@ r12 result exponent
|
@ r12 result exponent
|
||||||
|
.equ drsqrtapp_minus_8, (drsqrtapp-8)
|
||||||
adr r4,drsqrtapp-8 @ first eight table entries are never accessed because of the mantissa's leading 1
|
adr r4,drsqrtapp_minus_8 @ first eight table entries are never accessed because of the mantissa's leading 1
|
||||||
lsrs r2,r1,#17 @ y Q3
|
lsrs r2,r1,#17 @ y Q3
|
||||||
ldrb r2,[r4,r2] @ initial approximation to reciprocal square root a0 Q8
|
ldrb r2,[r4,r2] @ initial approximation to reciprocal square root a0 Q8
|
||||||
lsrs r3,r1,#4 @ first Newton-Raphson iteration
|
lsrs r3,r1,#4 @ first Newton-Raphson iteration
|
||||||
@ -1100,7 +1100,7 @@ dq_5:
|
|||||||
adds r2,r3 @ r1:r2 a5^2 Q106
|
adds r2,r3 @ r1:r2 a5^2 Q106
|
||||||
lsls r0,#22 @ y Q84
|
lsls r0,#22 @ y Q84
|
||||||
|
|
||||||
rsbs r1,#0
|
negs r1,r1
|
||||||
sbcs r0,r2 @ remainder y-a5^2
|
sbcs r0,r2 @ remainder y-a5^2
|
||||||
bmi 1f @ y<a5^2: no need to increment a5
|
bmi 1f @ y<a5^2: no need to increment a5
|
||||||
movs r3,#0
|
movs r3,#0
|
||||||
@ -1290,7 +1290,8 @@ ret_dzero:
|
|||||||
bx r14
|
bx r14
|
||||||
|
|
||||||
.weak d2fix_a // weak because it exists in float code too
|
.weak d2fix_a // weak because it exists in float code too
|
||||||
regular_func d2fix_a
|
.thumb_func
|
||||||
|
d2fix_a:
|
||||||
@ here
|
@ here
|
||||||
@ r0:r1 two's complement mantissa
|
@ r0:r1 two's complement mantissa
|
||||||
@ r2 unbaised exponent
|
@ r2 unbaised exponent
|
||||||
@ -1304,7 +1305,7 @@ regular_func d2fix_a
|
|||||||
movs r4,r0
|
movs r4,r0
|
||||||
lsls r1,r2
|
lsls r1,r2
|
||||||
lsls r0,r2
|
lsls r0,r2
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32 @ complementary shift
|
adds r2,#32 @ complementary shift
|
||||||
lsrs r4,r2
|
lsrs r4,r2
|
||||||
orrs r1,r4
|
orrs r1,r4
|
||||||
@ -1319,7 +1320,7 @@ regular_func d2fix_a
|
|||||||
bmi 1f @ long shift?
|
bmi 1f @ long shift?
|
||||||
mov r4,r1
|
mov r4,r1
|
||||||
lsls r4,r2
|
lsls r4,r2
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32 @ complementary shift
|
adds r2,#32 @ complementary shift
|
||||||
asrs r1,r2
|
asrs r1,r2
|
||||||
lsrs r0,r2
|
lsrs r0,r2
|
||||||
@ -1331,7 +1332,7 @@ regular_func d2fix_a
|
|||||||
asrs r1,#31 @ shift down 32 places
|
asrs r1,#31 @ shift down 32 places
|
||||||
adds r2,#32
|
adds r2,#32
|
||||||
bmi 1f @ very long shift?
|
bmi 1f @ very long shift?
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32
|
adds r2,#32
|
||||||
asrs r0,r2
|
asrs r0,r2
|
||||||
pop {r4,r15}
|
pop {r4,r15}
|
||||||
@ -1344,7 +1345,7 @@ double_section double2float_shim
|
|||||||
regular_func double2float_shim
|
regular_func double2float_shim
|
||||||
lsls r2,r1,#1
|
lsls r2,r1,#1
|
||||||
lsrs r2,#21 @ exponent
|
lsrs r2,#21 @ exponent
|
||||||
ldr r3,=#0x3ff-0x7f
|
ldr r3,=0x3ff-0x7f
|
||||||
subs r2,r3 @ fix exponent bias
|
subs r2,r3 @ fix exponent bias
|
||||||
ble 1f @ underflow or zero
|
ble 1f @ underflow or zero
|
||||||
cmp r2,#0xff
|
cmp r2,#0xff
|
||||||
@ -1432,7 +1433,7 @@ regular_func fix642double_shim
|
|||||||
sbcs r1,r3
|
sbcs r1,r3
|
||||||
uf2d:
|
uf2d:
|
||||||
push {r4,r5,r14}
|
push {r4,r5,r14}
|
||||||
ldr r4,=#0x432
|
ldr r4,=0x432
|
||||||
subs r2,r4,r2 @ form biased exponent
|
subs r2,r4,r2 @ form biased exponent
|
||||||
@ here
|
@ here
|
||||||
@ r0:r1 unnormalised mantissa
|
@ r0:r1 unnormalised mantissa
|
||||||
@ -1455,7 +1456,7 @@ uf2d:
|
|||||||
lsrs r4,r1,#21
|
lsrs r4,r1,#21
|
||||||
bcc 5b
|
bcc 5b
|
||||||
4:
|
4:
|
||||||
ldr r4,=#0x7fe
|
ldr r4,=0x7fe
|
||||||
cmp r2,r4
|
cmp r2,r4
|
||||||
bhs 6f @ over/underflow? return signed zero/infinity
|
bhs 6f @ over/underflow? return signed zero/infinity
|
||||||
7:
|
7:
|
||||||
@ -1506,7 +1507,7 @@ uf2d:
|
|||||||
double_section dunpacks
|
double_section dunpacks
|
||||||
regular_func dunpacks
|
regular_func dunpacks
|
||||||
mdunpacks r0,r1,r2,r3,r4
|
mdunpacks r0,r1,r2,r3,r4
|
||||||
ldr r3,=#0x3ff
|
ldr r3,=0x3ff
|
||||||
subs r2,r3 @ exponent without offset
|
subs r2,r3 @ exponent without offset
|
||||||
bx r14
|
bx r14
|
||||||
|
|
||||||
@ -1572,7 +1573,7 @@ double_section dreduce
|
|||||||
lsrs r3,r0,#24
|
lsrs r3,r0,#24
|
||||||
orrs r1,r3
|
orrs r1,r3
|
||||||
lsls r0,#8 @ r0:r1 Q60, to be shifted down -r2 places
|
lsls r0,#8 @ r0:r1 Q60, to be shifted down -r2 places
|
||||||
rsbs r3,r2,#0
|
negs r3,r2
|
||||||
adds r2,#32 @ shift down in r3, complementary shift in r2
|
adds r2,#32 @ shift down in r3, complementary shift in r2
|
||||||
bmi 1f @ long shift?
|
bmi 1f @ long shift?
|
||||||
2:
|
2:
|
||||||
@ -1663,13 +1664,13 @@ dsincos_internal:
|
|||||||
bl dreduce
|
bl dreduce
|
||||||
|
|
||||||
movs r4,#0
|
movs r4,#0
|
||||||
ldr r5,=#0x9df04dbb @ this value compensates for the non-unity scaling of the CORDIC rotations
|
ldr r5,=0x9df04dbb @ this value compensates for the non-unity scaling of the CORDIC rotations
|
||||||
ldr r6,=#0x36f656c5
|
ldr r6,=0x36f656c5
|
||||||
lsls r2,#31
|
lsls r2,#31
|
||||||
bcc 1f
|
bcc 1f
|
||||||
@ quadrant 2 or 3
|
@ quadrant 2 or 3
|
||||||
mvns r6,r6
|
mvns r6,r6
|
||||||
rsbs r5,r5,#0
|
negs r5,r5
|
||||||
adcs r6,r4
|
adcs r6,r4
|
||||||
1:
|
1:
|
||||||
lsls r2,#1
|
lsls r2,#1
|
||||||
@ -1757,7 +1758,7 @@ regular_func datan2_shim
|
|||||||
@ r2:r3 x
|
@ r2:r3 x
|
||||||
push {r4-r7,r14}
|
push {r4-r7,r14}
|
||||||
bl push_r8_r11
|
bl push_r8_r11
|
||||||
ldr r5,=#0x7ff00000
|
ldr r5,=0x7ff00000
|
||||||
movs r4,r1
|
movs r4,r1
|
||||||
ands r4,r5 @ y==0?
|
ands r4,r5 @ y==0?
|
||||||
beq 1f
|
beq 1f
|
||||||
@ -1786,7 +1787,7 @@ regular_func datan2_shim
|
|||||||
eors r3,r5
|
eors r3,r5
|
||||||
eors r1,r5
|
eors r1,r5
|
||||||
bmi 1f @ quadrant offset=+2 if y was positive
|
bmi 1f @ quadrant offset=+2 if y was positive
|
||||||
rsbs r6,#0 @ quadrant offset=-2 if y was negative
|
negs r6,r6 @ quadrant offset=-2 if y was negative
|
||||||
1:
|
1:
|
||||||
@ now in quadrant 0 or 3
|
@ now in quadrant 0 or 3
|
||||||
adds r7,r1,r5 @ r7=-r1
|
adds r7,r1,r5 @ r7=-r1
|
||||||
@ -1895,8 +1896,8 @@ regular_func datan2_shim
|
|||||||
|
|
||||||
cmp r6,#0
|
cmp r6,#0
|
||||||
beq 1f
|
beq 1f
|
||||||
ldr r4,=#0x885A308D @ π/2 Q61
|
ldr r4,=0x885A308D @ π/2 Q61
|
||||||
ldr r5,=#0x3243F6A8
|
ldr r5,=0x3243F6A8
|
||||||
bpl 2f
|
bpl 2f
|
||||||
mvns r4,r4 @ negative quadrant offset
|
mvns r4,r4 @ negative quadrant offset
|
||||||
mvns r5,r5
|
mvns r5,r5
|
||||||
@ -1959,8 +1960,8 @@ regular_func dexp_shim
|
|||||||
bl dreduce
|
bl dreduce
|
||||||
cmp r1,#0
|
cmp r1,#0
|
||||||
bge 1f
|
bge 1f
|
||||||
ldr r4,=#0xF473DE6B
|
ldr r4,=0xF473DE6B
|
||||||
ldr r5,=#0x2C5C85FD @ ln2 Q62
|
ldr r5,=0x2C5C85FD @ ln2 Q62
|
||||||
adds r0,r4
|
adds r0,r4
|
||||||
adcs r1,r5
|
adcs r1,r5
|
||||||
subs r2,#1
|
subs r2,#1
|
||||||
@ -1979,7 +1980,7 @@ regular_func dexp_shim
|
|||||||
sbcs r1,r5
|
sbcs r1,r5
|
||||||
bmi 1f
|
bmi 1f
|
||||||
|
|
||||||
rsbs r6,r7,#0
|
negs r6,r7
|
||||||
adds r6,#32 @ complementary shift
|
adds r6,#32 @ complementary shift
|
||||||
movs r5,r3
|
movs r5,r3
|
||||||
asrs r5,r7
|
asrs r5,r7
|
||||||
@ -2015,7 +2016,7 @@ regular_func dexp_shim
|
|||||||
adcs r1,r3
|
adcs r1,r3
|
||||||
|
|
||||||
pop {r2}
|
pop {r2}
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#62
|
adds r2,#62
|
||||||
bl fix642double_shim @ in principle we can pack faster than this because we know the exponent
|
bl fix642double_shim @ in principle we can pack faster than this because we know the exponent
|
||||||
pop {r4-r7,r15}
|
pop {r4-r7,r15}
|
||||||
@ -2046,7 +2047,7 @@ regular_func dln_shim
|
|||||||
movs r3,#0 @ y=0 Q62
|
movs r3,#0 @ y=0 Q62
|
||||||
|
|
||||||
3:
|
3:
|
||||||
rsbs r6,r7,#0
|
negs r6,r7
|
||||||
adds r6,#32 @ complementary shift
|
adds r6,#32 @ complementary shift
|
||||||
movs r5,r1
|
movs r5,r1
|
||||||
asrs r5,r7
|
asrs r5,r7
|
||||||
@ -2086,8 +2087,8 @@ regular_func dln_shim
|
|||||||
@ here:
|
@ here:
|
||||||
@ r2:r3 ln m/2 = ln m - ln2 Q62
|
@ r2:r3 ln m/2 = ln m - ln2 Q62
|
||||||
@ r7 unbiased exponent
|
@ r7 unbiased exponent
|
||||||
|
.equ dreddata1_plus_4, (dreddata1+4)
|
||||||
adr r4,dreddata1+4
|
adr r4,dreddata1_plus_4
|
||||||
ldmia r4,{r0,r1,r4}
|
ldmia r4,{r0,r1,r4}
|
||||||
adds r7,#1
|
adds r7,#1
|
||||||
muls r0,r7 @ Q62
|
muls r0,r7 @ Q62
|
||||||
@ -2128,12 +2129,12 @@ regular_func dln_shim
|
|||||||
pop {r4-r7,r15}
|
pop {r4-r7,r15}
|
||||||
|
|
||||||
5:
|
5:
|
||||||
ldr r1,=#0xfff00000
|
ldr r1,=0xfff00000
|
||||||
movs r0,#0
|
movs r0,#0
|
||||||
pop {r4-r7,r15}
|
pop {r4-r7,r15}
|
||||||
|
|
||||||
6:
|
6:
|
||||||
ldr r1,=#0x7ff00000
|
ldr r1,=0x7ff00000
|
||||||
movs r0,#0
|
movs r0,#0
|
||||||
pop {r4-r7,r15}
|
pop {r4-r7,r15}
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ wrapper_func __aeabi_i2f
|
|||||||
lsrs r1, r0, #31
|
lsrs r1, r0, #31
|
||||||
lsls r1, #31
|
lsls r1, #31
|
||||||
bpl 1f
|
bpl 1f
|
||||||
rsbs r0, #0
|
negs r0, r0
|
||||||
1:
|
1:
|
||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
beq 7f
|
beq 7f
|
||||||
@ -392,7 +392,7 @@ __aeabi_i2f_main:
|
|||||||
pop {r1, r2}
|
pop {r1, r2}
|
||||||
lsls r1, r0
|
lsls r1, r0
|
||||||
subs r0, #158
|
subs r0, #158
|
||||||
rsbs r0, #0
|
negs r0, r0
|
||||||
|
|
||||||
adds r1,#0x80 @ rounding
|
adds r1,#0x80 @ rounding
|
||||||
bcs 5f @ tripped carry? then have leading 1 in C as required (and result is even so can ignore sticky bits)
|
bcs 5f @ tripped carry? then have leading 1 in C as required (and result is even so can ignore sticky bits)
|
||||||
@ -459,7 +459,7 @@ regular_func float2int_z
|
|||||||
bl __aeabi_f2uiz
|
bl __aeabi_f2uiz
|
||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
bmi 1f
|
bmi 1f
|
||||||
rsbs r0, #0
|
negs r0, r0
|
||||||
pop {pc}
|
pop {pc}
|
||||||
1:
|
1:
|
||||||
movs r0, #128
|
movs r0, #128
|
||||||
@ -534,7 +534,7 @@ regular_func float2int64_z
|
|||||||
cmp r1, #0
|
cmp r1, #0
|
||||||
bmi 1f
|
bmi 1f
|
||||||
movs r2, #0
|
movs r2, #0
|
||||||
rsbs r0, #0
|
negs r0, r0
|
||||||
sbcs r2, r1
|
sbcs r2, r1
|
||||||
mov r1, r2
|
mov r1, r2
|
||||||
pop {pc}
|
pop {pc}
|
||||||
|
@ -100,7 +100,7 @@ regular_func fix642float_shim
|
|||||||
movs r5,r0
|
movs r5,r0
|
||||||
movs r0,r1
|
movs r0,r1
|
||||||
4:
|
4:
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32+29
|
adds r2,#32+29
|
||||||
|
|
||||||
// bl packx
|
// bl packx
|
||||||
@ -132,7 +132,7 @@ regular_func fatan2_shim
|
|||||||
bmi 2f @ force y to 0 proper, so result will be zero
|
bmi 2f @ force y to 0 proper, so result will be zero
|
||||||
subs r4,r2,r3 @ calculate shift
|
subs r4,r2,r3 @ calculate shift
|
||||||
bge 1f @ ex>=ey?
|
bge 1f @ ex>=ey?
|
||||||
rsbs r4,#0 @ make shift positive
|
negs r4,r4 @ make shift positive
|
||||||
asrs r0,r4
|
asrs r0,r4
|
||||||
cmp r4,#28
|
cmp r4,#28
|
||||||
blo 3f
|
blo 3f
|
||||||
@ -159,8 +159,8 @@ regular_func fatan2_shim
|
|||||||
ldr r3, =0x2cfc @ &pi_q29, circular coefficients
|
ldr r3, =0x2cfc @ &pi_q29, circular coefficients
|
||||||
cmp r0,#0 @ x negative
|
cmp r0,#0 @ x negative
|
||||||
bge 5f
|
bge 5f
|
||||||
rsbs r0,#0 @ rotate to 1st/4th quadrants
|
negs r0,r0 @ rotate to 1st/4th quadrants
|
||||||
rsbs r1,#0
|
negs r1,r1
|
||||||
ldr r2,[r3] @ pi Q29
|
ldr r2,[r3] @ pi Q29
|
||||||
5:
|
5:
|
||||||
movs r4,#1 @ m=1
|
movs r4,#1 @ m=1
|
||||||
@ -272,7 +272,7 @@ d2fix_a:
|
|||||||
movs r4,r0
|
movs r4,r0
|
||||||
lsls r1,r2
|
lsls r1,r2
|
||||||
lsls r0,r2
|
lsls r0,r2
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32 @ complementary shift
|
adds r2,#32 @ complementary shift
|
||||||
lsrs r4,r2
|
lsrs r4,r2
|
||||||
orrs r1,r4
|
orrs r1,r4
|
||||||
@ -287,7 +287,7 @@ d2fix_a:
|
|||||||
bmi 1f @ long shift?
|
bmi 1f @ long shift?
|
||||||
mov r4,r1
|
mov r4,r1
|
||||||
lsls r4,r2
|
lsls r4,r2
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32 @ complementary shift
|
adds r2,#32 @ complementary shift
|
||||||
asrs r1,r2
|
asrs r1,r2
|
||||||
lsrs r0,r2
|
lsrs r0,r2
|
||||||
@ -299,7 +299,7 @@ d2fix_a:
|
|||||||
asrs r1,#31 @ shift down 32 places
|
asrs r1,#31 @ shift down 32 places
|
||||||
adds r2,#32
|
adds r2,#32
|
||||||
bmi 1f @ very long shift?
|
bmi 1f @ very long shift?
|
||||||
rsbs r2,#0
|
negs r2,r2
|
||||||
adds r2,#32
|
adds r2,#32
|
||||||
asrs r0,r2
|
asrs r0,r2
|
||||||
pop {r4,r15}
|
pop {r4,r15}
|
||||||
@ -329,7 +329,7 @@ regular_func float2double_shim
|
|||||||
cmp r2,#0xff @ Inf?
|
cmp r2,#0xff @ Inf?
|
||||||
beq 2f
|
beq 2f
|
||||||
lsrs r1,#4 @ exponent and top 20 bits of mantissa
|
lsrs r1,#4 @ exponent and top 20 bits of mantissa
|
||||||
ldr r2,=#(0x3ff-0x7f)<<20 @ difference in exponent offsets
|
ldr r2,=(0x3ff-0x7f)<<20 @ difference in exponent offsets
|
||||||
adds r1,r2
|
adds r1,r2
|
||||||
orrs r1,r3
|
orrs r1,r3
|
||||||
lsls r0,#29 @ bottom 3 bits of mantissa
|
lsls r0,#29 @ bottom 3 bits of mantissa
|
||||||
@ -340,7 +340,7 @@ regular_func float2double_shim
|
|||||||
movs r0,#0
|
movs r0,#0
|
||||||
bx r14
|
bx r14
|
||||||
2:
|
2:
|
||||||
ldr r1,=#0x7ff00000 @ return signed infinity
|
ldr r1,=0x7ff00000 @ return signed infinity
|
||||||
adds r1,r3
|
adds r1,r3
|
||||||
b 3b
|
b 3b
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user