diff options
Diffstat (limited to 'thumb2divmod.s')
-rw-r--r-- | thumb2divmod.s | 145 |
1 files changed, 73 insertions, 72 deletions
diff --git a/thumb2divmod.s b/thumb2divmod.s index 4a28c13..5ef8cfe 100644 --- a/thumb2divmod.s +++ b/thumb2divmod.s @@ -1,3 +1,4 @@ + .include "thumb2regs.s"
.arch armv7-a
.syntax unified
@@ -9,158 +10,158 @@ .thumb_func
.align
divide:
- eor r12,r3,r4
- cmp r4,#0
+ eor SCRATCH_REG,BSTACK_1,BSTACK_0
+ cmp BSTACK_0,#0
it lt
- neglt r4,r4
- cmp r3,#0
+ neglt BSTACK_0,BSTACK_0
+ cmp BSTACK_1,#0
it lt
- neglt r3,r3
+ neglt BSTACK_1,BSTACK_1
- cmp r4,#32
+ cmp BSTACK_0,#32
bls divide_by_small_number
- clz r1,r4
- clz r2,r3
- rsb r1,r1,#31-5-11
- add r1,r1,r2
- mov r2,#0
+ clz BSTACK_3,BSTACK_0
+ clz BSTACK_2,BSTACK_1
+ rsb BSTACK_3,BSTACK_3,#31-5-11
+ add BSTACK_3,BSTACK_3,BSTACK_2
+ mov BSTACK_2,#0
- cmp r1,#32-5-11
+ cmp BSTACK_3,#32-5-11
bhs divide_large_result
- add r1,r1,r1,lsl #1
+ add BSTACK_3,BSTACK_3,BSTACK_3,lsl #1
.align @ alignment is right now, try to not make this a nop
- add r14,pc,#6
- add r14,r14,r1,lsl #2
- mov pc,r14
+ add LINK_REG,pc,#6
+ add LINK_REG,LINK_REG,BSTACK_3,lsl #2
+ mov pc,LINK_REG
.set shift,32-5-11
.rept 32-5-11
.set shift,shift-1
- subs r1,r3,r4,lsl #shift
+ subs BSTACK_3,BSTACK_1,BSTACK_0,lsl #shift
itt cs
- movcs r3,r1
- orrcs r2,r2,#1<<shift
+ movcs BSTACK_1,BSTACK_3
+ orrcs BSTACK_2,BSTACK_2,#1<<shift
.endr
- mov r4,r2
- cmp r12,#0
+ mov BSTACK_0,BSTACK_2
+ cmp SCRATCH_REG,#0
it lt
- neglt r4,r4
+ neglt BSTACK_0,BSTACK_0
ldr pc,[sp],#4
.thumb_func
divide_large_result:
bpl divide_result_0
- vmov s13,r3
- vmov s15,r4
+ vmov s13,BSTACK_1
+ vmov s15,BSTACK_0
vcvt.f64.u32 d6,s13
vcvt.f64.u32 d7,s15
vdiv.f64 d7,d6,d7
vcvt.u32.f64 s15,d7
- vmov r4,s15
- cmp r12,#0
+ vmov BSTACK_0,s15
+ cmp SCRATCH_REG,#0
it lt
- neglt r4,r4
+ neglt BSTACK_0,BSTACK_0
ldr pc,[sp],#4
divide_result_0:
- mov r4,#0
+ mov BSTACK_0,#0
ldr pc,[sp],#4
.thumb_func
.align
divide_by_small_number:
- mov r1,r4,lsl #3
- add r1,r1,pc
- ldrb r4,[r1,#(div_mod_table+1)-(divide_by_small_number+8)]
- ldr r2,[r1,#(div_mod_table+4)-(divide_by_small_number+8)]
- ldrb r1,[r1,#div_mod_table-(divide_by_small_number+8)]
- adds r3,r3,r4
+ mov BSTACK_3,BSTACK_0,lsl #3
+ add BSTACK_3,BSTACK_3,pc
+ ldrb BSTACK_0,[BSTACK_3,#(div_mod_table+1)-(divide_by_small_number+8)]
+ ldr BSTACK_2,[BSTACK_3,#(div_mod_table+4)-(divide_by_small_number+8)]
+ ldrb BSTACK_3,[BSTACK_3,#div_mod_table-(divide_by_small_number+8)]
+ adds BSTACK_1,BSTACK_1,BSTACK_0
it cc
- umullcc r4,r2,r3,r2
- lsr r4,r2,r1
- cmp r12,#0
+ umullcc BSTACK_0,BSTACK_2,BSTACK_1,BSTACK_2
+ lsr BSTACK_0,BSTACK_2,BSTACK_3
+ cmp SCRATCH_REG,#0
it lt
- neglt r4,r4
+ neglt BSTACK_0,BSTACK_0
ldr pc,[sp],#4
.globl modulo
.thumb_func
modulo:
- cmp r4,#0
+ cmp BSTACK_0,#0
it lt
- neglt r4,r4
- movs r12,r3
+ neglt BSTACK_0,BSTACK_0
+ movs SCRATCH_REG,BSTACK_1
it lt
- neglt r3,r3
+ neglt BSTACK_1,BSTACK_1
- cmp r4,#32
+ cmp BSTACK_0,#32
bls modulo_of_small_number
- clz r1,r4
- clz r2,r3
- rsb r1,r1,#31-5-11
- add r1,r1,r2
+ clz BSTACK_3,BSTACK_0
+ clz BSTACK_2,BSTACK_1
+ rsb BSTACK_3,BSTACK_3,#31-5-11
+ add BSTACK_3,BSTACK_3,BSTACK_2
- cmp r1,#32-5-11
+ cmp BSTACK_3,#32-5-11
bhs modulo_large_divide_result
.align
- add r14,pc,#6
- add r14,r14,r1,lsl #3
- mov pc,r14
+ add LINK_REG,pc,#6
+ add LINK_REG,LINK_REG,BSTACK_3,lsl #3
+ mov pc,LINK_REG
.set shift,32
.rept 32
.set shift,shift-1
- subs r1,r3,r4,lsl #shift
+ subs BSTACK_3,BSTACK_1,BSTACK_0,lsl #shift
it cs
- movcs r3,r1
+ movcs BSTACK_1,BSTACK_3
.endr
modulo_divide_result_0:
- mov r4,r3
- cmp r12,#0
+ mov BSTACK_0,BSTACK_1
+ cmp SCRATCH_REG,#0
it lt
- neglt r4,r4
+ neglt BSTACK_0,BSTACK_0
ldr pc,[sp],#4
.thumb_func
modulo_large_divide_result:
bpl modulo_divide_result_0
- vmov s13,r3
- vmov s15,r4
+ vmov s13,BSTACK_1
+ vmov s15,BSTACK_0
vcvt.f64.u32 d6,s13
vcvt.f64.u32 d7,s15
vdiv.f64 d7,d6,d7
vcvt.u32.f64 s15,d7
- vmov r2,s15
+ vmov BSTACK_2,s15
b modulo_from_quotient
.thumb_func
.align
modulo_of_small_number:
- add r1,pc,#4
- add r1,r1,r4,lsl #3
- ldrb r0,[r1,#(div_mod_table+1)-(modulo_of_small_number+8)]
- ldr r2,[r1,#(div_mod_table+4)-(modulo_of_small_number+8)]
- ldrb r1,[r1,#div_mod_table-(modulo_of_small_number+8)]
- adds r14,r3,r0
+ add BSTACK_3,pc,#4
+ add BSTACK_3,BSTACK_3,BSTACK_0,lsl #3
+ ldrb BSTACK_4,[BSTACK_3,#(div_mod_table+1)-(modulo_of_small_number+8)]
+ ldr BSTACK_2,[BSTACK_3,#(div_mod_table+4)-(modulo_of_small_number+8)]
+ ldrb BSTACK_3,[BSTACK_3,#div_mod_table-(modulo_of_small_number+8)]
+ adds LINK_REG,BSTACK_1,BSTACK_4
it cc
- umullcc r0,r2,r14,r2
- lsr r2,r2,r1
+ umullcc BSTACK_4,BSTACK_2,LINK_REG,BSTACK_2
+ lsr BSTACK_2,BSTACK_2,BSTACK_3
.thumb_func
modulo_from_quotient:
-@ mls r4,r4,r2,r3
- neg r3,r3
- mla r4,r4,r2,r3
- cmp r12,#0
+@ mls BSTACK_0,BSTACK_0,BSTACK_2,BSTACK_1
+ neg BSTACK_1,BSTACK_1
+ mla BSTACK_0,BSTACK_0,BSTACK_2,BSTACK_1
+ cmp SCRATCH_REG,#0
it ge
- negge r4,r4
+ negge BSTACK_0,BSTACK_0
ldr pc,[sp],#4
div_mod_table:
|