From 355c7daa2cfc3a6b29f72376dcea6a3976a8695f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 26 Nov 2016 13:44:41 +0000 Subject: monster commit: replace all registers with aliases to ease optimisation --- thumb2ap.s | 2998 +++++++++++++++++------------------ thumb2compact.s | 1225 +++++++------- thumb2compact_rmark.s | 1145 +++++++------- thumb2compact_rmarkr.s | 1233 ++++++++------- thumb2copy.s | 1283 ++++++++------- thumb2divmod.s | 145 +- thumb2fileIO3.s | 907 +++++------ thumb2mark.s | 2727 ++++++++++++++++---------------- thumb2regs.s | 27 + thumb2startup.s | 4121 ++++++++++++++++++++++++------------------------ 10 files changed, 7914 insertions(+), 7897 deletions(-) create mode 100644 thumb2regs.s diff --git a/thumb2ap.s b/thumb2ap.s index 02afada..208d01d 100644 --- a/thumb2ap.s +++ b/thumb2ap.s @@ -100,977 +100,977 @@ .globl yet_args_needed_31 ap_32: - ldr r11,[r8] - mov r3,#32*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#32*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap32 ap_31: - ldr r11,[r8] - mov r3,#31*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#31*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap31 ap_30: - ldr r11,[r8] - mov r3,#30*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#30*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap30 ap_29: - ldr r11,[r8] - mov r3,#29*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#29*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap29 ap_28: - ldr r11,[r8] - mov r3,#28*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#28*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap28 ap_27: - ldr r11,[r8] - mov r3,#27*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#27*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap27 ap_26: - ldr r11,[r8] - mov r3,#26*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#26*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap26 ap_25: - ldr r11,[r8] - mov r3,#25*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#25*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap25 ap_24: - ldr r11,[r8] - mov r3,#24*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#24*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap24 ap_23: - ldr r11,[r8] - mov r3,#23*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#23*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap23 ap_22: - ldr r11,[r8] - mov r3,#22*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#22*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap22 ap_21: - ldr r11,[r8] - mov r3,#21*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#21*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap21 ap_20: - ldr r11,[r8] - mov r3,#20*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#20*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap20 ap_19: - ldr r11,[r8] - mov r3,#19*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#19*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap19 ap_18: - ldr r11,[r8] - mov r3,#18*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#18*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap18 ap_17: - ldr r11,[r8] - mov r3,#17*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#17*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap17 ap_16: - ldr r11,[r8] - mov r3,#16*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#16*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap16 ap_15: - ldr r11,[r8] - mov r3,#15*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#15*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap15 ap_14: - ldr r11,[r8] - mov r3,#14*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#14*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap14 ap_13: - ldr r11,[r8] - mov r3,#13*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#13*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap13 ap_12: - ldr r11,[r8] - mov r3,#12*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#12*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap12 ap_11: - ldr r11,[r8] - mov r3,#11*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#11*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap11 ap_10: - ldr r11,[r8] - mov r3,#10*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#10*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap10 ap_9: - ldr r11,[r8] - mov r3,#9*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#9*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap9 ap_8: - ldr r11,[r8] - mov r3,#8*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#8*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap8 ap_7: - ldr r11,[r8] - mov r3,#7*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#7*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap7 ap_6: - ldr r11,[r8] - mov r3,#6*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#6*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap6 ap_5: - ldr r11,[r8] - mov r3,#5*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#5*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap5 ap_4: - ldr r11,[r8] - mov r3,#4*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#4*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap4 ap_3: - ldr r11,[r8] - mov r3,#3*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#3*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap3 ap_2: - ldr r11,[r8] - mov r3,#2*8 - ldrh r12,[r11] - cmp r12,r3 + ldr ASTACK_3,[ASTACK_2] + mov BSTACK_1,#2*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 bne no_fast_ap2_ fast_ap_2_2_: - add r3,r3,r11 - ldrh r4,[r11,#-2] - ldr r2,[r3,#-6] + add BSTACK_1,BSTACK_1,ASTACK_3 + ldrh BSTACK_0,[ASTACK_3,#-2] + ldr BSTACK_2,[BSTACK_1,#-6] .ifdef PROFILE - sub r2,r2,#16 + sub BSTACK_2,BSTACK_2,#16 .else - sub r2,r2,#8 + sub BSTACK_2,BSTACK_2,#8 .endif - cmp r4,#1 + cmp BSTACK_0,#1 blo repl_args_0_2 beq repl_args_1 - cmp r4,#3 + cmp BSTACK_0,#3 blo repl_args_2 - str r7,[r9,#4] - str r6,[r9],#8 + str ASTACK_1,[ASTACK_PTR,#4] + str ASTACK_0,[ASTACK_PTR],#8 - ldr r7,[r8,#8] + ldr ASTACK_1,[ASTACK_2,#8] b fast_ap_ no_fast_ap2_: - str r6,[r9],#4 - mov r6,r7 - mov r7,r8 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + mov ASTACK_1,ASTACK_2 b no_fast_ap2 fast_ap_2_2: - mov r8,r7 - mov r7,r6 - ldr r6,[r9,#-4]! + mov ASTACK_2,ASTACK_1 + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! b fast_ap_2_2_ fast_ap_2: - mov r8,r7 - mov r7,r6 - ldr r6,[r9,#-4]! + mov ASTACK_2,ASTACK_1 + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! fast_ap: - add r3,r3,r11 - ldrh r4,[r11,#-2] - ldr r2,[r3,#-6] + add BSTACK_1,BSTACK_1,ASTACK_3 + ldrh BSTACK_0,[ASTACK_3,#-2] + ldr BSTACK_2,[BSTACK_1,#-6] .ifdef PROFILE - sub r2,r2,#16 + sub BSTACK_2,BSTACK_2,#16 .else - sub r2,r2,#8 + sub BSTACK_2,BSTACK_2,#8 .endif - cmp r4,#1 + cmp BSTACK_0,#1 blo repl_args_0 beq repl_args_1 - cmp r4,#3 + cmp BSTACK_0,#3 blo repl_args_2 - str r7,[r9,#4] - str r6,[r9],#8 + str ASTACK_1,[ASTACK_PTR,#4] + str ASTACK_0,[ASTACK_PTR],#8 - ldr r7,[r8,#8] + ldr ASTACK_1,[ASTACK_2,#8] fast_ap_: - ldr r8,[r8,#4] + ldr ASTACK_2,[ASTACK_2,#4] beq repl_args_3 - cmp r4,#5 + cmp BSTACK_0,#5 blo repl_args_4 beq repl_args_5 - cmp r4,#7 + cmp BSTACK_0,#7 blo repl_args_6 - sub r4,r4,#2 + sub BSTACK_0,BSTACK_0,#2 repl_args_7_: - ldr r1,[r7,r4,lsl #2] - str r1,[r9],#4 - sub r4,r4,#1 - cmp r4,#6-2 + ldr BSTACK_3,[ASTACK_1,BSTACK_0,lsl #2] + str BSTACK_3,[ASTACK_PTR],#4 + sub BSTACK_0,BSTACK_0,#1 + cmp BSTACK_0,#6-2 bne repl_args_7_ repl_args_6: - ldr r4,[r7,#16] - str r4,[r9],#12 - ldr r4,[r7,#12] - str r4,[r9,#-8] - ldr r4,[r7,#8] - str r4,[r9,#-4] - ldr r6,[r7,#4] - ldr r7,[r7] - bx r2 + ldr BSTACK_0,[ASTACK_1,#16] + str BSTACK_0,[ASTACK_PTR],#12 + ldr BSTACK_0,[ASTACK_1,#12] + str BSTACK_0,[ASTACK_PTR,#-8] + ldr BSTACK_0,[ASTACK_1,#8] + str BSTACK_0,[ASTACK_PTR,#-4] + ldr ASTACK_0,[ASTACK_1,#4] + ldr ASTACK_1,[ASTACK_1] + bx BSTACK_2 repl_args_0: - mov r8,r7 - mov r7,r6 - ldr r6,[r9,#-4]! + mov ASTACK_2,ASTACK_1 + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! repl_args_0_2: - bx r2 + bx BSTACK_2 repl_args_1: - ldr r8,[r8,#4] - bx r2 + ldr ASTACK_2,[ASTACK_2,#4] + bx BSTACK_2 repl_args_2: - str r6,[r9],#4 - mov r6,r7 - ldr r7,[r8,#8] - ldr r8,[r8,#4] - bx r2 + str ASTACK_0,[ASTACK_PTR],#4 + mov ASTACK_0,ASTACK_1 + ldr ASTACK_1,[ASTACK_2,#8] + ldr ASTACK_2,[ASTACK_2,#4] + bx BSTACK_2 repl_args_3: - ldr r6,[r7,#4] - ldr r7,[r7] - bx r2 + ldr ASTACK_0,[ASTACK_1,#4] + ldr ASTACK_1,[ASTACK_1] + bx BSTACK_2 repl_args_4: - ldr r4,[r7,#8] - str r4,[r9],#4 - ldr r6,[r7,#4] - ldr r7,[r7] - bx r2 + ldr BSTACK_0,[ASTACK_1,#8] + str BSTACK_0,[ASTACK_PTR],#4 + ldr ASTACK_0,[ASTACK_1,#4] + ldr ASTACK_1,[ASTACK_1] + bx BSTACK_2 repl_args_5: - ldr r4,[r7,#12] - str r4,[r9],#8 - ldr r4,[r7,#8] - str r4,[r9,#-4] - ldr r6,[r7,#4] - ldr r7,[r7] - bx r2 + ldr BSTACK_0,[ASTACK_1,#12] + str BSTACK_0,[ASTACK_PTR],#8 + ldr BSTACK_0,[ASTACK_1,#8] + str BSTACK_0,[ASTACK_PTR,#-4] + ldr ASTACK_0,[ASTACK_1,#4] + ldr ASTACK_1,[ASTACK_1] + bx BSTACK_2 no_fast_ap32: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#31*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#31*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap31: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#30*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#30*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap30: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#29*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#29*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap29: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#28*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#28*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap28: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#27*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#27*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap27: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#26*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#26*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap26: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#25*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#25*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap25: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#24*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#24*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap24: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#23*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#23*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap23: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#22*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#22*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap22: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#21*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#21*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap21: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#20*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#20*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap20: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#19*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#19*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap19: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#18*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#18*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap18: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#17*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#17*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap17: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#16*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#16*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap16: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#15*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#15*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap15: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#14*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#14*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap14: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#13*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#13*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap13: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#12*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#12*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap12: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#11*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#11*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap11: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#10*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#10*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap10: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#9*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#9*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap9: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#8*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#8*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap8: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#7*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#7*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap7: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#6*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#6*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap6: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#5*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#5*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap5: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#4*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#4*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap4: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#3*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#3*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2 no_fast_ap3: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r11,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - - mov r3,#2*8 - ldrh r12,[r11] - cmp r12,r3 + blx SCRATCH_REG + ldr ASTACK_3,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + + mov BSTACK_1,#2*8 + ldrh SCRATCH_REG,[ASTACK_3] + cmp SCRATCH_REG,BSTACK_1 beq fast_ap_2_2 no_fast_ap2: - ldr r12,[r11,#2] + ldr SCRATCH_REG,[ASTACK_3,#2] .align add lr,pc,#7 str lr,[sp,#-4]! - blx r12 - ldr r8,[r6] - mov r7,r6 - ldr r6,[r9,#-4]! - ldr r12,[r8,#2] - bx r12 + blx SCRATCH_REG + ldr ASTACK_2,[ASTACK_0] + mov ASTACK_1,ASTACK_0 + ldr ASTACK_0,[ASTACK_PTR,#-4]! + ldr SCRATCH_REG,[ASTACK_2,#2] + bx SCRATCH_REG .ltorg add_empty_node_2: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_2_gc add_empty_node_2_gc_: - lao r12,__cycle__in__spine,1 - mov r8,r7 - mov r7,r6 - mov r6,r10 - otoa r12,__cycle__in__spine,1 - str r12,[r10],#12 + lao SCRATCH_REG,__cycle__in__spine,1 + mov ASTACK_2,ASTACK_1 + mov ASTACK_1,ASTACK_0 + mov ASTACK_0,HEAP_PTR + otoa SCRATCH_REG,__cycle__in__spine,1 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_2_gc: str lr,[sp,#-4]! @@ -1079,13 +1079,13 @@ add_empty_node_2_gc: b add_empty_node_2_gc_ add_empty_node_3: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_3_gc add_empty_node_3_gc_: - lao r12,__cycle__in__spine,2 - str r10,[r9],#4 - otoa r12,__cycle__in__spine,2 - str r12,[r10],#12 + lao SCRATCH_REG,__cycle__in__spine,2 + str HEAP_PTR,[ASTACK_PTR],#4 + otoa SCRATCH_REG,__cycle__in__spine,2 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_3_gc: str lr,[sp,#-4]! @@ -1094,16 +1094,16 @@ add_empty_node_3_gc: b add_empty_node_3_gc_ add_empty_node_4: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_4_gc add_empty_node_4_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - str r10,[r9,#-4] - lao r12,__cycle__in__spine,3 - add r9,r9,#4 - otoa r12,__cycle__in__spine,3 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + str HEAP_PTR,[ASTACK_PTR,#-4] + lao SCRATCH_REG,__cycle__in__spine,3 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,3 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_4_gc: str lr,[sp,#-4]! @@ -1112,18 +1112,18 @@ add_empty_node_4_gc: b add_empty_node_4_gc_ add_empty_node_5: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_5_gc add_empty_node_5_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - str r10,[r9,#-8] - lao r12,__cycle__in__spine,4 - add r9,r9,#4 - otoa r12,__cycle__in__spine,4 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + str HEAP_PTR,[ASTACK_PTR,#-8] + lao SCRATCH_REG,__cycle__in__spine,4 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,4 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_5_gc: str lr,[sp,#-4]! @@ -1132,302 +1132,302 @@ add_empty_node_5_gc: b add_empty_node_5_gc_ add_empty_node_6: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_6_gc add_empty_node_6_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] - str r10,[r9,#-12] - lao r12,__cycle__in__spine,5 - add r9,r9,#4 - otoa r12,__cycle__in__spine,5 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] + str HEAP_PTR,[ASTACK_PTR,#-12] + lao SCRATCH_REG,__cycle__in__spine,5 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,5 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_6_gc: bl collect_3 b add_empty_node_6_gc_ add_empty_node_7: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_7_gc add_empty_node_7_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] - ldr r11,[r9,#-16] - str r11,[r9,#-12] - str r10,[r9,#-16] - lao r12,__cycle__in__spine,6 - add r9,r9,#4 - otoa r12,__cycle__in__spine,6 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] + ldr ASTACK_3,[ASTACK_PTR,#-16] + str ASTACK_3,[ASTACK_PTR,#-12] + str HEAP_PTR,[ASTACK_PTR,#-16] + lao SCRATCH_REG,__cycle__in__spine,6 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,6 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_7_gc: bl collect_3 b add_empty_node_7_gc_ add_empty_node_8: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_8_gc add_empty_node_8_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] - ldr r11,[r9,#-16] - str r11,[r9,#-12] - ldr r11,[r9,#-20] - str r11,[r9,#-16] - str r10,[r9,#-20] - lao r12,__cycle__in__spine,7 - add r9,r9,#4 - otoa r12,__cycle__in__spine,7 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] + ldr ASTACK_3,[ASTACK_PTR,#-16] + str ASTACK_3,[ASTACK_PTR,#-12] + ldr ASTACK_3,[ASTACK_PTR,#-20] + str ASTACK_3,[ASTACK_PTR,#-16] + str HEAP_PTR,[ASTACK_PTR,#-20] + lao SCRATCH_REG,__cycle__in__spine,7 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,7 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_8_gc: bl collect_3 b add_empty_node_8_gc_ add_empty_node_9: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_9_gc add_empty_node_9_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] - ldr r11,[r9,#-16] - str r11,[r9,#-12] - ldr r11,[r9,#-20] - str r11,[r9,#-16] - ldr r11,[r9,#-24] - str r11,[r9,#-20] - str r10,[r9,#-24] - lao r12,__cycle__in__spine,8 - add r9,r9,#4 - otoa r12,__cycle__in__spine,8 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] + ldr ASTACK_3,[ASTACK_PTR,#-16] + str ASTACK_3,[ASTACK_PTR,#-12] + ldr ASTACK_3,[ASTACK_PTR,#-20] + str ASTACK_3,[ASTACK_PTR,#-16] + ldr ASTACK_3,[ASTACK_PTR,#-24] + str ASTACK_3,[ASTACK_PTR,#-20] + str HEAP_PTR,[ASTACK_PTR,#-24] + lao SCRATCH_REG,__cycle__in__spine,8 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,8 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_9_gc: bl collect_3 b add_empty_node_9_gc_ add_empty_node_10: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_10_gc add_empty_node_10_gc_: - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] - ldr r11,[r9,#-16] - str r11,[r9,#-12] - ldr r11,[r9,#-20] - str r11,[r9,#-16] - ldr r11,[r9,#-24] - str r11,[r9,#-20] - ldr r11,[r9,#-28] - str r11,[r9,#-24] - str r10,[r9,#-28] - lao r12,__cycle__in__spine,9 - add r9,r9,#4 - otoa r12,__cycle__in__spine,9 - str r12,[r10],#12 + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] + ldr ASTACK_3,[ASTACK_PTR,#-16] + str ASTACK_3,[ASTACK_PTR,#-12] + ldr ASTACK_3,[ASTACK_PTR,#-20] + str ASTACK_3,[ASTACK_PTR,#-16] + ldr ASTACK_3,[ASTACK_PTR,#-24] + str ASTACK_3,[ASTACK_PTR,#-20] + ldr ASTACK_3,[ASTACK_PTR,#-28] + str ASTACK_3,[ASTACK_PTR,#-24] + str HEAP_PTR,[ASTACK_PTR,#-28] + lao SCRATCH_REG,__cycle__in__spine,9 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,9 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_10_gc: bl collect_3 b add_empty_node_10_gc_ add_empty_node_31: - mov r3,#7 + mov BSTACK_1,#7 b add_empty_node_11_ add_empty_node_27: - mov r3,#6 + mov BSTACK_1,#6 b add_empty_node_11_ add_empty_node_23: - mov r3,#5 + mov BSTACK_1,#5 b add_empty_node_11_ add_empty_node_19: - mov r3,#4 + mov BSTACK_1,#4 b add_empty_node_11_ add_empty_node_15: - mov r3,#3 + mov BSTACK_1,#3 b add_empty_node_11_ add_empty_node_11: - mov r3,#2 + mov BSTACK_1,#2 add_empty_node_11_: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_11_gc add_empty_node_11_gc_: - mov r4,r9 + mov BSTACK_0,ASTACK_PTR add_empty_node_11_lp: - ldr r11,[r4,#-4] - str r11,[r4] - ldr r11,[r4,#-8] - str r11,[r4,#-4] - ldr r11,[r4,#-12] - str r11,[r4,#-8] - ldr r11,[r4,#-16] - str r11,[r4,#-12] - sub r4,r4,#16 - subs r3,r3,#1 + ldr ASTACK_3,[BSTACK_0,#-4] + str ASTACK_3,[BSTACK_0] + ldr ASTACK_3,[BSTACK_0,#-8] + str ASTACK_3,[BSTACK_0,#-4] + ldr ASTACK_3,[BSTACK_0,#-12] + str ASTACK_3,[BSTACK_0,#-8] + ldr ASTACK_3,[BSTACK_0,#-16] + str ASTACK_3,[BSTACK_0,#-12] + sub BSTACK_0,BSTACK_0,#16 + subs BSTACK_1,BSTACK_1,#1 bne add_empty_node_11_lp - str r10,[r4] - lao r12,__cycle__in__spine,10 - add r9,r9,#4 - otoa r12,__cycle__in__spine,10 - str r12,[r10],#12 + str HEAP_PTR,[BSTACK_0] + lao SCRATCH_REG,__cycle__in__spine,10 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,10 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_11_gc: bl collect_3 b add_empty_node_11_gc_ add_empty_node_32: - mov r3,#7 + mov BSTACK_1,#7 b add_empty_node_12_ add_empty_node_28: - mov r3,#6 + mov BSTACK_1,#6 b add_empty_node_12_ add_empty_node_24: - mov r3,#5 + mov BSTACK_1,#5 b add_empty_node_12_ add_empty_node_20: - mov r3,#4 + mov BSTACK_1,#4 b add_empty_node_12_ add_empty_node_16: - mov r3,#3 + mov BSTACK_1,#3 b add_empty_node_12_ add_empty_node_12: - mov r3,#2 + mov BSTACK_1,#2 add_empty_node_12_: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_12_gc add_empty_node_12_gc_: - mov r4,r9 - ldr r11,[r9,#-4] - str r11,[r9] + mov BSTACK_0,ASTACK_PTR + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] add_empty_node_12_lp: - ldr r11,[r4,#-8] - str r11,[r4,#-4] - ldr r11,[r4,#-12] - str r11,[r4,#-8] - ldr r11,[r4,#-16] - str r11,[r4,#-12] - ldr r11,[r4,#-20] - str r11,[r4,#-16]! - subs r3,r3,#1 + ldr ASTACK_3,[BSTACK_0,#-8] + str ASTACK_3,[BSTACK_0,#-4] + ldr ASTACK_3,[BSTACK_0,#-12] + str ASTACK_3,[BSTACK_0,#-8] + ldr ASTACK_3,[BSTACK_0,#-16] + str ASTACK_3,[BSTACK_0,#-12] + ldr ASTACK_3,[BSTACK_0,#-20] + str ASTACK_3,[BSTACK_0,#-16]! + subs BSTACK_1,BSTACK_1,#1 bne add_empty_node_12_lp - str r10,[r4,#-4] - lao r12,__cycle__in__spine,11 - add r9,r9,#4 - otoa r12,__cycle__in__spine,11 - str r12,[r10],#12 + str HEAP_PTR,[BSTACK_0,#-4] + lao SCRATCH_REG,__cycle__in__spine,11 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,11 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_12_gc: bl collect_3 b add_empty_node_12_gc_ add_empty_node_29: - mov r3,#6 + mov BSTACK_1,#6 b add_empty_node_13_ add_empty_node_25: - mov r3,#5 + mov BSTACK_1,#5 b add_empty_node_13_ add_empty_node_21: - mov r3,#4 + mov BSTACK_1,#4 b add_empty_node_13_ add_empty_node_17: - mov r3,#3 + mov BSTACK_1,#3 b add_empty_node_13_ add_empty_node_13: - mov r3,#2 + mov BSTACK_1,#2 add_empty_node_13_: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_13_gc add_empty_node_13_gc_: - mov r4,r9 - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] + mov BSTACK_0,ASTACK_PTR + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] add_empty_node_13_lp: - ldr r11,[r4,#-12] - str r11,[r4,#-8] - ldr r11,[r4,#-16] - str r11,[r4,#-12] - ldr r11,[r4,#-20] - str r11,[r4,#-16] - ldr r11,[r4,#-24] - str r11,[r4,#-20] - sub r4,r4,#16 - subs r3,r3,#1 + ldr ASTACK_3,[BSTACK_0,#-12] + str ASTACK_3,[BSTACK_0,#-8] + ldr ASTACK_3,[BSTACK_0,#-16] + str ASTACK_3,[BSTACK_0,#-12] + ldr ASTACK_3,[BSTACK_0,#-20] + str ASTACK_3,[BSTACK_0,#-16] + ldr ASTACK_3,[BSTACK_0,#-24] + str ASTACK_3,[BSTACK_0,#-20] + sub BSTACK_0,BSTACK_0,#16 + subs BSTACK_1,BSTACK_1,#1 bne add_empty_node_13_lp - str r10,[r4,#-8] - lao r12,__cycle__in__spine,12 - add r9,r9,#4 - otoa r12,__cycle__in__spine,12 - str r12,[r10],#12 + str HEAP_PTR,[BSTACK_0,#-8] + lao SCRATCH_REG,__cycle__in__spine,12 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,12 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_13_gc: bl collect_3 b add_empty_node_13_gc_ add_empty_node_30: - mov r3,#6 + mov BSTACK_1,#6 b add_empty_node_14_ add_empty_node_26: - mov r3,#5 + mov BSTACK_1,#5 b add_empty_node_14_ add_empty_node_22: - mov r3,#4 + mov BSTACK_1,#4 b add_empty_node_14_ add_empty_node_18: - mov r3,#3 + mov BSTACK_1,#3 b add_empty_node_14_ add_empty_node_14: - mov r3,#2 + mov BSTACK_1,#2 b add_empty_node_14_ add_empty_node_14_: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo add_empty_node_14_gc add_empty_node_14_gc: - mov r4,r9 - ldr r11,[r9,#-4] - str r11,[r9] - ldr r11,[r9,#-8] - str r11,[r9,#-4] - ldr r11,[r9,#-12] - str r11,[r9,#-8] + mov BSTACK_0,ASTACK_PTR + ldr ASTACK_3,[ASTACK_PTR,#-4] + str ASTACK_3,[ASTACK_PTR] + ldr ASTACK_3,[ASTACK_PTR,#-8] + str ASTACK_3,[ASTACK_PTR,#-4] + ldr ASTACK_3,[ASTACK_PTR,#-12] + str ASTACK_3,[ASTACK_PTR,#-8] add_empty_node_14_lp: - ldr r11,[r4,#-16] - str r11,[r4,#-12] - ldr r11,[r4,#-20] - str r11,[r4,#-16] - ldr r11,[r4,#-24] - str r11,[r4,#-20] - ldr r11,[r4,#-28] - str r11,[r4,#-24] - sub r4,r4,#16 - subs r3,r3,#1 + ldr ASTACK_3,[BSTACK_0,#-16] + str ASTACK_3,[BSTACK_0,#-12] + ldr ASTACK_3,[BSTACK_0,#-20] + str ASTACK_3,[BSTACK_0,#-16] + ldr ASTACK_3,[BSTACK_0,#-24] + str ASTACK_3,[BSTACK_0,#-20] + ldr ASTACK_3,[BSTACK_0,#-28] + str ASTACK_3,[BSTACK_0,#-24] + sub BSTACK_0,BSTACK_0,#16 + subs BSTACK_1,BSTACK_1,#1 bne add_empty_node_14_lp - str r10,[r4,#-12] - lao r12,__cycle__in__spine,13 - add r9,r9,#4 - otoa r12,__cycle__in__spine,13 - str r12,[r10],#12 + str HEAP_PTR,[BSTACK_0,#-12] + lao SCRATCH_REG,__cycle__in__spine,13 + add ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,__cycle__in__spine,13 + str SCRATCH_REG,[HEAP_PTR],#12 bx lr add_empty_node_14_gc_: bl collect_3 @@ -1451,14 +1451,14 @@ add_empty_node_14_gc_: .ltorg yet_args_needed_0: - subs r5,r5,#2 + subs HEAP_FREE,HEAP_FREE,#2 blo yet_args_needed_0_gc yet_args_needed_0_gc_r: - str r6,[r10,#4] - ldr r4,[r7] - mov r6,r10 - add r4,r4,#8 - str r4,[r10],#8 + str ASTACK_0,[HEAP_PTR,#4] + ldr BSTACK_0,[ASTACK_1] + mov ASTACK_0,HEAP_PTR + add BSTACK_0,BSTACK_0,#8 + str BSTACK_0,[HEAP_PTR],#8 ldr pc,[sp],#4 yet_args_needed_0_gc: @@ -1467,24 +1467,24 @@ yet_args_needed_0_gc: .p2align 2 - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 b build_node_2 .ifdef PROFILE nop nop .endif yet_args_needed_1: - subs r5,r5,#3 + subs HEAP_FREE,HEAP_FREE,#3 blo yet_args_needed_1_gc yet_args_needed_1_gc_r: - str r6,[r10,#8] - ldr r4,[r7] - mov r6,r10 - add r4,r4,#8 - str r4,[r10] - ldr r3,[r7,#4] - str r3,[r10,#4] - add r10,r10,#12 + str ASTACK_0,[HEAP_PTR,#8] + ldr BSTACK_0,[ASTACK_1] + mov ASTACK_0,HEAP_PTR + add BSTACK_0,BSTACK_0,#8 + str BSTACK_0,[HEAP_PTR] + ldr BSTACK_1,[ASTACK_1,#4] + str BSTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#12 ldr pc,[sp],#4 yet_args_needed_1_gc: @@ -1494,11 +1494,11 @@ yet_args_needed_1_gc: build_node_2: blo build_node_2_gc build_node_2_gc_r: - str r3,[r10] - str r7,[r10,#4] - str r6,[r10,#8] - mov r6,r10 - add r10,r10,#12 + str BSTACK_1,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_0,[HEAP_PTR,#8] + mov ASTACK_0,HEAP_PTR + add HEAP_PTR,HEAP_PTR,#12 ldr pc,[sp],#4 build_node_2_gc: @@ -1507,27 +1507,27 @@ build_node_2_gc: .p2align 2 - subs r5,r5,#5 + subs HEAP_FREE,HEAP_FREE,#5 b build_node_3 .ifdef PROFILE nop nop .endif yet_args_needed_2: - subs r5,r5,#5 + subs HEAP_FREE,HEAP_FREE,#5 blo gc_22 gc_r_22: - ldr r4,[r7] - str r6,[r10,#4] - add r4,r4,#8 - ldr r8,[r7,#4] - str r4,[r10,#8] - add r6,r10,#8 - str r8,[r10,#12] - ldr r8,[r7,#8] - str r8,[r10] - str r10,[r10,#16] - add r10,r10,#20 + ldr BSTACK_0,[ASTACK_1] + str ASTACK_0,[HEAP_PTR,#4] + add BSTACK_0,BSTACK_0,#8 + ldr ASTACK_2,[ASTACK_1,#4] + str BSTACK_0,[HEAP_PTR,#8] + add ASTACK_0,HEAP_PTR,#8 + str ASTACK_2,[HEAP_PTR,#12] + ldr ASTACK_2,[ASTACK_1,#8] + str ASTACK_2,[HEAP_PTR] + str HEAP_PTR,[HEAP_PTR,#16] + add HEAP_PTR,HEAP_PTR,#20 ldr pc,[sp],#4 gc_22: bl collect_2 @@ -1536,16 +1536,16 @@ gc_22: bl collect_2 build_node_3: blo build_node_3_gc build_node_3_gc_r: - str r3,[r10] - add r8,r10,#12 - str r7,[r10,#4] - str r8,[r10,#8] - str r6,[r10,#12] - mov r6,r10 - ldr r8,[r9,#-4] - subs r9,r9,#4 - str r8,[r10,#16] - add r10,r10,#20 + str BSTACK_1,[HEAP_PTR] + add ASTACK_2,HEAP_PTR,#12 + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_0,[HEAP_PTR,#12] + mov ASTACK_0,HEAP_PTR + ldr ASTACK_2,[ASTACK_PTR,#-4] + subs ASTACK_PTR,ASTACK_PTR,#4 + str ASTACK_2,[HEAP_PTR,#16] + add HEAP_PTR,HEAP_PTR,#20 ldr pc,[sp],#4 build_node_3_gc: @@ -1554,30 +1554,30 @@ build_node_3_gc: .p2align 2 - subs r5,r5,#6 + subs HEAP_FREE,HEAP_FREE,#6 b build_node_4 .ifdef PROFILE nop nop .endif yet_args_needed_3: - subs r5,r5,#6 + subs HEAP_FREE,HEAP_FREE,#6 blo gc_23 gc_r_23: - ldr r4,[r7] - str r6,[r10,#8] - add r4,r4,#8 - ldr r8,[r7,#4] - str r4,[r10,#12] - ldr r7,[r7,#8] - str r8,[r10,#16] - ldr r8,[r7] - str r10,[r10,#20] - str r8,[r10] - ldr r8,[r7,#4] - add r6,r10,#12 - str r8,[r10,#4] - add r10,r10,#24 + ldr BSTACK_0,[ASTACK_1] + str ASTACK_0,[HEAP_PTR,#8] + add BSTACK_0,BSTACK_0,#8 + ldr ASTACK_2,[ASTACK_1,#4] + str BSTACK_0,[HEAP_PTR,#12] + ldr ASTACK_1,[ASTACK_1,#8] + str ASTACK_2,[HEAP_PTR,#16] + ldr ASTACK_2,[ASTACK_1] + str HEAP_PTR,[HEAP_PTR,#20] + str ASTACK_2,[HEAP_PTR] + ldr ASTACK_2,[ASTACK_1,#4] + add ASTACK_0,HEAP_PTR,#12 + str ASTACK_2,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#24 ldr pc,[sp],#4 gc_23: bl collect_2 @@ -1586,18 +1586,18 @@ gc_23: bl collect_2 build_node_4: blo build_node_4_gc build_node_4_gc_r: - str r3,[r10] - add r8,r10,#12 - str r7,[r10,#4] - str r8,[r10,#8] - str r6,[r10,#12] - mov r6,r10 - ldr r8,[r9,#-4] - str r8,[r10,#16] - ldr r8,[r9,#-8] - subs r9,r9,#8 - str r8,[r10,#20] - add r10,r10,#24 + str BSTACK_1,[HEAP_PTR] + add ASTACK_2,HEAP_PTR,#12 + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_0,[HEAP_PTR,#12] + mov ASTACK_0,HEAP_PTR + ldr ASTACK_2,[ASTACK_PTR,#-4] + str ASTACK_2,[HEAP_PTR,#16] + ldr ASTACK_2,[ASTACK_PTR,#-8] + subs ASTACK_PTR,ASTACK_PTR,#8 + str ASTACK_2,[HEAP_PTR,#20] + add HEAP_PTR,HEAP_PTR,#24 ldr pc,[sp],#4 build_node_4_gc: @@ -1606,32 +1606,32 @@ build_node_4_gc: .p2align 2 - subs r5,r5,#7 + subs HEAP_FREE,HEAP_FREE,#7 b build_node_5 .ifdef PROFILE nop nop .endif yet_args_needed_4: - subs r5,r5,#7 + subs HEAP_FREE,HEAP_FREE,#7 blo gc_24 gc_r_24: - ldr r4,[r7] - str r6,[r10,#12] - add r4,r4,#8 - ldr r8,[r7,#4] - str r4,[r10,#16] - ldr r7,[r7,#8] - str r8,[r10,#20] - ldr r8,[r7] - str r10,[r10,#24] - str r8,[r10] - ldr r8,[r7,#4] - add r6,r10,#16 - str r8,[r10,#4] - ldr r8,[r7,#8] - str r8,[r10,#8] - add r10,r10,#28 + ldr BSTACK_0,[ASTACK_1] + str ASTACK_0,[HEAP_PTR,#12] + add BSTACK_0,BSTACK_0,#8 + ldr ASTACK_2,[ASTACK_1,#4] + str BSTACK_0,[HEAP_PTR,#16] + ldr ASTACK_1,[ASTACK_1,#8] + str ASTACK_2,[HEAP_PTR,#20] + ldr ASTACK_2,[ASTACK_1] + str HEAP_PTR,[HEAP_PTR,#24] + str ASTACK_2,[HEAP_PTR] + ldr ASTACK_2,[ASTACK_1,#4] + add ASTACK_0,HEAP_PTR,#16 + str ASTACK_2,[HEAP_PTR,#4] + ldr ASTACK_2,[ASTACK_1,#8] + str ASTACK_2,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#28 ldr pc,[sp],#4 gc_24: bl collect_2 @@ -1640,20 +1640,20 @@ gc_24: bl collect_2 build_node_5: blo build_node_5_gc build_node_5_gc_r: - str r3,[r10] - add r8,r10,#12 - str r7,[r10,#4] - str r8,[r10,#8] - str r6,[r10,#12] - mov r6,r10 - ldr r8,[r9,#-4] - str r8,[r10,#16] - ldr r8,[r9,#-8] - str r8,[r10,#20] - ldr r8,[r9,#-12] - subs r9,r9,#12 - str r8,[r10,#24] - add r10,r10,#28 + str BSTACK_1,[HEAP_PTR] + add ASTACK_2,HEAP_PTR,#12 + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_0,[HEAP_PTR,#12] + mov ASTACK_0,HEAP_PTR + ldr ASTACK_2,[ASTACK_PTR,#-4] + str ASTACK_2,[HEAP_PTR,#16] + ldr ASTACK_2,[ASTACK_PTR,#-8] + str ASTACK_2,[HEAP_PTR,#20] + ldr ASTACK_2,[ASTACK_PTR,#-12] + subs ASTACK_PTR,ASTACK_PTR,#12 + str ASTACK_2,[HEAP_PTR,#24] + add HEAP_PTR,HEAP_PTR,#28 ldr pc,[sp],#4 build_node_5_gc: @@ -1662,369 +1662,369 @@ build_node_5_gc: .p2align 2 - mov r4,#8 + mov BSTACK_0,#8 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_5: - ldr r3,[r7] - mov r4,#8 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#8 b yet_args_needed_ .p2align 2 - mov r4,#9 + mov BSTACK_0,#9 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_6: - ldr r3,[r7] - mov r4,#9 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#9 b yet_args_needed_ .p2align 2 - mov r4,#10 + mov BSTACK_0,#10 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_7: - ldr r3,[r7] - mov r4,#10 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#10 b yet_args_needed_ .p2align 2 - mov r4,#11 + mov BSTACK_0,#11 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_8: - ldr r3,[r7] - mov r4,#11 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#11 b yet_args_needed_ .p2align 2 - mov r4,#12 + mov BSTACK_0,#12 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_9: - ldr r3,[r7] - mov r4,#12 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#12 b yet_args_needed_ .p2align 2 - mov r4,#13 + mov BSTACK_0,#13 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_10: - ldr r3,[r7] - mov r4,#13 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#13 b yet_args_needed_ .p2align 2 - mov r4,#14 + mov BSTACK_0,#14 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_11: - ldr r3,[r7] - mov r4,#14 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#14 b yet_args_needed_ .p2align 2 - mov r4,#15 + mov BSTACK_0,#15 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_12: - ldr r3,[r7] - mov r4,#15 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#15 b yet_args_needed_ .p2align 2 - mov r4,#16 + mov BSTACK_0,#16 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_13: - ldr r3,[r7] - mov r4,#16 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#16 b yet_args_needed_ .p2align 2 - mov r4,#17 + mov BSTACK_0,#17 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_14: - ldr r3,[r7] - mov r4,#17 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#17 b yet_args_needed_ .p2align 2 - mov r4,#18 + mov BSTACK_0,#18 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_15: - ldr r3,[r7] - mov r4,#18 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#18 b yet_args_needed_ .p2align 2 - mov r4,#19 + mov BSTACK_0,#19 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_16: - ldr r3,[r7] - mov r4,#19 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#19 b yet_args_needed_ .p2align 2 - mov r4,#20 + mov BSTACK_0,#20 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_17: - ldr r3,[r7] - mov r4,#20 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#20 b yet_args_needed_ .p2align 2 - mov r4,#21 + mov BSTACK_0,#21 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_18: - ldr r3,[r7] - mov r4,#21 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#21 b yet_args_needed_ .p2align 2 - mov r4,#22 + mov BSTACK_0,#22 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_19: - ldr r3,[r7] - mov r4,#22 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#22 b yet_args_needed_ .p2align 2 - mov r4,#23 + mov BSTACK_0,#23 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_20: - ldr r3,[r7] - mov r4,#23 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#23 b yet_args_needed_ .p2align 2 - mov r4,#24 + mov BSTACK_0,#24 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_21: - ldr r3,[r7] - mov r4,#24 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#24 b yet_args_needed_ .p2align 2 - mov r4,#25 + mov BSTACK_0,#25 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_22: - ldr r3,[r7] - mov r4,#25 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#25 b yet_args_needed_ .p2align 2 - mov r4,#26 + mov BSTACK_0,#26 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_23: - ldr r3,[r7] - mov r4,#26 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#26 b yet_args_needed_ .p2align 2 - mov r4,#27 + mov BSTACK_0,#27 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_24: - ldr r3,[r7] - mov r4,#27 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#27 b yet_args_needed_ .p2align 2 - mov r4,#28 + mov BSTACK_0,#28 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_25: - ldr r3,[r7] - mov r4,#28 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#28 b yet_args_needed_ .p2align 2 - mov r4,#29 + mov BSTACK_0,#29 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_26: - ldr r3,[r7] - mov r4,#29 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#29 b yet_args_needed_ .p2align 2 - mov r4,#30 + mov BSTACK_0,#30 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_27: - ldr r3,[r7] - mov r4,#30 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#30 b yet_args_needed_ .p2align 2 - mov r4,#31 + mov BSTACK_0,#31 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_28: - ldr r3,[r7] - mov r4,#31 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#31 b yet_args_needed_ .p2align 2 - mov r4,#32 + mov BSTACK_0,#32 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_29: - ldr r3,[r7] - mov r4,#32 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#32 b yet_args_needed_ .p2align 2 - mov r4,#33 + mov BSTACK_0,#33 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_30: - ldr r3,[r7] - mov r4,#33 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#33 b yet_args_needed_ .p2align 2 - mov r4,#34 + mov BSTACK_0,#34 b build_node_ .ifdef PROFILE nop nop .endif yet_args_needed_31: - ldr r3,[r7] - mov r4,#34 + ldr BSTACK_1,[ASTACK_1] + mov BSTACK_0,#34 b yet_args_needed_ yet_args_needed: @ for more than 4 arguments - ldr r3,[r7] - ldrh r4,[r3,#-2] - add r4,r4,#3 + ldr BSTACK_1,[ASTACK_1] + ldrh BSTACK_0,[BSTACK_1,#-2] + add BSTACK_0,BSTACK_0,#3 yet_args_needed_: - subs r5,r5,r4 + subs HEAP_FREE,HEAP_FREE,BSTACK_0 blo yet_args_needed_gc yet_args_needed_gc_r: - subs r4,r4,#3+1+4 - str r3,[sp,#-4]! - str r6,[sp,#-4]! - ldr r3,[r7,#4] - ldr r7,[r7,#8] - mov r8,r10 - ldr r6,[r7] - str r6,[r10] - ldr r6,[r7,#4] - str r6,[r10,#4] - ldr r6,[r7,#8] - str r6,[r10,#8] - add r7,r7,#12 - add r10,r10,#12 + subs BSTACK_0,BSTACK_0,#3+1+4 + str BSTACK_1,[sp,#-4]! + str ASTACK_0,[sp,#-4]! + ldr BSTACK_1,[ASTACK_1,#4] + ldr ASTACK_1,[ASTACK_1,#8] + mov ASTACK_2,HEAP_PTR + ldr ASTACK_0,[ASTACK_1] + str ASTACK_0,[HEAP_PTR] + ldr ASTACK_0,[ASTACK_1,#4] + str ASTACK_0,[HEAP_PTR,#4] + ldr ASTACK_0,[ASTACK_1,#8] + str ASTACK_0,[HEAP_PTR,#8] + add ASTACK_1,ASTACK_1,#12 + add HEAP_PTR,HEAP_PTR,#12 yet_args_needed_cp_a: - ldr r6,[r7],#4 - str r6,[r10],#4 - subs r4,r4,#1 + ldr ASTACK_0,[ASTACK_1],#4 + str ASTACK_0,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bge yet_args_needed_cp_a - ldr r6,[sp],#4 - str r6,[r10] - ldr r4,[sp],#4 - add r4,r4,#8 - str r4,[r10,#4] - add r6,r10,#4 - str r3,[r10,#8] - str r8,[r10,#12] - add r10,r10,#16 + ldr ASTACK_0,[sp],#4 + str ASTACK_0,[HEAP_PTR] + ldr BSTACK_0,[sp],#4 + add BSTACK_0,BSTACK_0,#8 + str BSTACK_0,[HEAP_PTR,#4] + add ASTACK_0,HEAP_PTR,#4 + str BSTACK_1,[HEAP_PTR,#8] + str ASTACK_2,[HEAP_PTR,#12] + add HEAP_PTR,HEAP_PTR,#16 ldr pc,[sp],#4 yet_args_needed_gc: @@ -2032,29 +2032,29 @@ yet_args_needed_gc: b yet_args_needed_gc_r build_node_: - subs r5,r5,r4 + subs HEAP_FREE,HEAP_FREE,BSTACK_0 blo build_node_gc build_node_gc_r: - str r3,[r10] - add r8,r10,#12 - str r7,[r10,#4] - str r8,[r10,#8] - str r6,[r10,#12] - mov r6,r10 - ldr r8,[r9,#-4] - str r8,[r10,#16] - ldr r8,[r9,#-8] - str r8,[r10,#20] - ldr r8,[r9,#-12] - subs r9,r9,#12 - str r8,[r10,#24] - add r10,r10,#28 - - subs r4,r4,#5+2 + str BSTACK_1,[HEAP_PTR] + add ASTACK_2,HEAP_PTR,#12 + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_0,[HEAP_PTR,#12] + mov ASTACK_0,HEAP_PTR + ldr ASTACK_2,[ASTACK_PTR,#-4] + str ASTACK_2,[HEAP_PTR,#16] + ldr ASTACK_2,[ASTACK_PTR,#-8] + str ASTACK_2,[HEAP_PTR,#20] + ldr ASTACK_2,[ASTACK_PTR,#-12] + subs ASTACK_PTR,ASTACK_PTR,#12 + str ASTACK_2,[HEAP_PTR,#24] + add HEAP_PTR,HEAP_PTR,#28 + + subs BSTACK_0,BSTACK_0,#5+2 build_node_cp_a: - ldr r8,[r9,#-4]! - str r8,[r10],#4 - subs r4,r4,#1 + ldr ASTACK_2,[ASTACK_PTR,#-4]! + str ASTACK_2,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bne build_node_cp_a ldr pc,[sp],#4 @@ -2098,684 +2098,684 @@ build_node_gc: .globl e__system__nind apupd_1: - ldr r12,[sp] - lao r8,apupd_upd,0 - otoa r8,apupd_upd,0 - cmp r12,r8 - lao r8,ap_1,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,0 + otoa ASTACK_2,apupd_upd,0 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_1,0 bne ap_upd - ldr r8,[r9,#-4] - ldr r4,[r9,#-8] - lao r12,e__system__nind,23 - subs r9,r9,#4 - otoa r12,e__system__nind,23 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-4] + ldr BSTACK_0,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,23 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,23 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] ap_1: - ldr r8,[r7] - ldr r12,[r8,#2] - bx r12 + ldr ASTACK_2,[ASTACK_1] + ldr SCRATCH_REG,[ASTACK_2,#2] + bx SCRATCH_REG apupd_2: - ldr r12,[sp] - lao r8,apupd_upd,1 - otoa r8,apupd_upd,1 - cmp r12,r8 - lao r8,ap_2,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,1 + otoa ASTACK_2,apupd_upd,1 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_2,0 bne ap_upd - ldr r8,[r9,#-8] - ldr r4,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] - lao r12,e__system__nind,24 - subs r9,r9,#4 - otoa r12,e__system__nind,24 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-8] + ldr BSTACK_0,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,24 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,24 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_2 apupd_3: - ldr r12,[sp] - lao r8,apupd_upd,2 - otoa r8,apupd_upd,2 - cmp r12,r8 - lao r8,ap_3,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,2 + otoa ASTACK_2,apupd_upd,2 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_3,0 bne ap_upd - ldr r8,[r9,#-12] - ldr r4,[r9,#-16] - ldr r3,[r9,#-8] - str r3,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] - lao r12,e__system__nind,25 - subs r9,r9,#4 - otoa r12,e__system__nind,25 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-12] + ldr BSTACK_0,[ASTACK_PTR,#-16] + ldr BSTACK_1,[ASTACK_PTR,#-8] + str BSTACK_1,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,25 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,25 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_3 apupd_4: - ldr r12,[sp] - lao r8,apupd_upd,3 - otoa r8,apupd_upd,3 - cmp r12,r8 - lao r8,ap_4,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,3 + otoa ASTACK_2,apupd_upd,3 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_4,0 bne ap_upd - ldr r8,[r9,#-16] - ldr r4,[r9,#-20] - ldr r3,[r9,#-12] - str r3,[r9,#-16] - ldr r3,[r9,#-8] - str r3,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] - lao r12,e__system__nind,26 - subs r9,r9,#4 - otoa r12,e__system__nind,26 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-16] + ldr BSTACK_0,[ASTACK_PTR,#-20] + ldr BSTACK_1,[ASTACK_PTR,#-12] + str BSTACK_1,[ASTACK_PTR,#-16] + ldr BSTACK_1,[ASTACK_PTR,#-8] + str BSTACK_1,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,26 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,26 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_4 apupd_5: - ldr r12,[sp] - lao r8,apupd_upd,4 - otoa r8,apupd_upd,4 - cmp r12,r8 - lao r8,ap_5,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,4 + otoa ASTACK_2,apupd_upd,4 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_5,0 bne ap_upd - ldr r8,[r9,#-20] - ldr r4,[r9,#-24] - ldr r3,[r9,#-16] - str r3,[r9,#-20] - ldr r3,[r9,#-12] - str r3,[r9,#-16] - ldr r3,[r9,#-8] - str r3,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] - lao r12,e__system__nind,27 - subs r9,r9,#4 - otoa r12,e__system__nind,27 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-20] + ldr BSTACK_0,[ASTACK_PTR,#-24] + ldr BSTACK_1,[ASTACK_PTR,#-16] + str BSTACK_1,[ASTACK_PTR,#-20] + ldr BSTACK_1,[ASTACK_PTR,#-12] + str BSTACK_1,[ASTACK_PTR,#-16] + ldr BSTACK_1,[ASTACK_PTR,#-8] + str BSTACK_1,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,27 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,27 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_5 apupd_6: - ldr r12,[sp] - lao r8,apupd_upd,5 - otoa r8,apupd_upd,5 - cmp r12,r8 - lao r8,ap_6,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,5 + otoa ASTACK_2,apupd_upd,5 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_6,0 bne ap_upd - ldr r8,[r9,#-24] - ldr r4,[r9,#-28] - ldr r3,[r9,#-20] - str r3,[r9,#-24] - ldr r3,[r9,#-16] - str r3,[r9,#-20] - ldr r3,[r9,#-12] - str r3,[r9,#-16] - ldr r3,[r9,#-8] - str r3,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] - lao r12,e__system__nind,28 - subs r9,r9,#4 - otoa r12,e__system__nind,28 - str r12,[r8] - str r4,[r8,#4] + ldr ASTACK_2,[ASTACK_PTR,#-24] + ldr BSTACK_0,[ASTACK_PTR,#-28] + ldr BSTACK_1,[ASTACK_PTR,#-20] + str BSTACK_1,[ASTACK_PTR,#-24] + ldr BSTACK_1,[ASTACK_PTR,#-16] + str BSTACK_1,[ASTACK_PTR,#-20] + ldr BSTACK_1,[ASTACK_PTR,#-12] + str BSTACK_1,[ASTACK_PTR,#-16] + ldr BSTACK_1,[ASTACK_PTR,#-8] + str BSTACK_1,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] + lao SCRATCH_REG,e__system__nind,28 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,28 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_6 apupd_7: - ldr r12,[sp] - lao r8,apupd_upd,6 - otoa r8,apupd_upd,6 - cmp r12,r8 - lao r8,ap_7,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,6 + otoa ASTACK_2,apupd_upd,6 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_7,0 bne ap_upd - ldr r8,[r9,#-28] - ldr r4,[r9,#-32] + ldr ASTACK_2,[ASTACK_PTR,#-28] + ldr BSTACK_0,[ASTACK_PTR,#-32] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_8 - lao r12,e__system__nind,29 - subs r9,r9,#4 - otoa r12,e__system__nind,29 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,29 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,29 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_7 apupd_8: - ldr r12,[sp] - lao r8,apupd_upd,7 - otoa r8,apupd_upd,7 - cmp r12,r8 - lao r8,ap_8,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,7 + otoa ASTACK_2,apupd_upd,7 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_8,0 bne ap_upd - ldr r8,[r9,#-32] - ldr r4,[r9,#-36] + ldr ASTACK_2,[ASTACK_PTR,#-32] + ldr BSTACK_0,[ASTACK_PTR,#-36] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_9 - lao r12,e__system__nind,30 - subs r9,r9,#4 - otoa r12,e__system__nind,30 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,30 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,30 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_8 apupd_9: - ldr r12,[sp] - lao r8,apupd_upd,8 - otoa r8,apupd_upd,8 - cmp r12,r8 - lao r8,ap_9,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,8 + otoa ASTACK_2,apupd_upd,8 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_9,0 bne ap_upd - ldr r8,[r9,#-36] - ldr r4,[r9,#-40] + ldr ASTACK_2,[ASTACK_PTR,#-36] + ldr BSTACK_0,[ASTACK_PTR,#-40] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_10 - lao r12,e__system__nind,31 - subs r9,r9,#4 - otoa r12,e__system__nind,31 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,31 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,31 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_9 apupd_10: - ldr r12,[sp] - lao r8,apupd_upd,9 - otoa r8,apupd_upd,9 - cmp r12,r8 - lao r8,ap_10,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,9 + otoa ASTACK_2,apupd_upd,9 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_10,0 bne ap_upd - ldr r8,[r9,#-40] - ldr r4,[r9,#-44] + ldr ASTACK_2,[ASTACK_PTR,#-40] + ldr BSTACK_0,[ASTACK_PTR,#-44] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_11 - lao r12,e__system__nind,32 - subs r9,r9,#4 - otoa r12,e__system__nind,32 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,32 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,32 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_10 apupd_11: - ldr r12,[sp] - lao r8,apupd_upd,10 - otoa r8,apupd_upd,10 - cmp r12,r8 - lao r8,ap_11,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,10 + otoa ASTACK_2,apupd_upd,10 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_11,0 bne ap_upd - ldr r8,[r9,#-44] - ldr r4,[r9,#-48] + ldr ASTACK_2,[ASTACK_PTR,#-44] + ldr BSTACK_0,[ASTACK_PTR,#-48] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_12 - lao r12,e__system__nind,33 - subs r9,r9,#4 - otoa r12,e__system__nind,33 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,33 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,33 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_11 apupd_12: - ldr r12,[sp] - lao r8,apupd_upd,11 - otoa r8,apupd_upd,11 - cmp r12,r8 - lao r8,ap_12,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,11 + otoa ASTACK_2,apupd_upd,11 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_12,0 bne ap_upd - ldr r8,[r9,#-48] - ldr r4,[r9,#-52] + ldr ASTACK_2,[ASTACK_PTR,#-48] + ldr BSTACK_0,[ASTACK_PTR,#-52] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_13 - lao r12,e__system__nind,34 - subs r9,r9,#4 - otoa r12,e__system__nind,34 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,34 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,34 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_12 apupd_13: - ldr r12,[sp] - lao r8,apupd_upd,12 - otoa r8,apupd_upd,12 - cmp r12,r8 - lao r8,ap_13,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,12 + otoa ASTACK_2,apupd_upd,12 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_13,0 bne ap_upd - ldr r8,[r9,#-52] - ldr r4,[r9,#-56] + ldr ASTACK_2,[ASTACK_PTR,#-52] + ldr BSTACK_0,[ASTACK_PTR,#-56] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_14 - lao r12,e__system__nind,35 - subs r9,r9,#4 - otoa r12,e__system__nind,35 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,35 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,35 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_13 apupd_14: - ldr r12,[sp] - lao r8,apupd_upd,13 - otoa r8,apupd_upd,13 - cmp r12,r8 - lao r8,ap_14,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,13 + otoa ASTACK_2,apupd_upd,13 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_14,0 bne ap_upd - ldr r8,[r9,#-56] - ldr r4,[r9,#-60] + ldr ASTACK_2,[ASTACK_PTR,#-56] + ldr BSTACK_0,[ASTACK_PTR,#-60] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_15 - lao r12,e__system__nind,36 - subs r9,r9,#4 - otoa r12,e__system__nind,36 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,36 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,36 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_14 apupd_15: - ldr r12,[sp] - lao r8,apupd_upd,14 - otoa r8,apupd_upd,14 - cmp r12,r8 - lao r8,ap_15,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,14 + otoa ASTACK_2,apupd_upd,14 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_15,0 bne ap_upd - ldr r8,[r9,#-60] - ldr r4,[r9,#-64] + ldr ASTACK_2,[ASTACK_PTR,#-60] + ldr BSTACK_0,[ASTACK_PTR,#-64] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_16 - lao r12,e__system__nind,37 - subs r9,r9,#4 - otoa r12,e__system__nind,37 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,37 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,37 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_15 apupd_16: - ldr r12,[sp] - lao r8,apupd_upd,15 - otoa r8,apupd_upd,15 - cmp r12,r8 - lao r8,ap_16,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,15 + otoa ASTACK_2,apupd_upd,15 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_16,0 bne ap_upd - ldr r8,[r9,#-64] - ldr r4,[r9,#-68] + ldr ASTACK_2,[ASTACK_PTR,#-64] + ldr BSTACK_0,[ASTACK_PTR,#-68] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_17 - lao r12,e__system__nind,38 - subs r9,r9,#4 - otoa r12,e__system__nind,38 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,38 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,38 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_16 apupd_17: - ldr r12,[sp] - lao r8,apupd_upd,16 - otoa r8,apupd_upd,16 - cmp r12,r8 - lao r8,ap_17,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,16 + otoa ASTACK_2,apupd_upd,16 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_17,0 bne ap_upd - ldr r8,[r9,#-68] - ldr r4,[r9,#-72] + ldr ASTACK_2,[ASTACK_PTR,#-68] + ldr BSTACK_0,[ASTACK_PTR,#-72] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_18 - lao r12,e__system__nind,39 - subs r9,r9,#4 - otoa r12,e__system__nind,39 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,39 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,39 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_17 apupd_18: - ldr r12,[sp] - lao r8,apupd_upd,17 - otoa r8,apupd_upd,17 - cmp r12,r8 - lao r8,ap_18,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,17 + otoa ASTACK_2,apupd_upd,17 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_18,0 bne ap_upd - ldr r8,[r9,#-72] - ldr r4,[r9,#-76] + ldr ASTACK_2,[ASTACK_PTR,#-72] + ldr BSTACK_0,[ASTACK_PTR,#-76] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_19 - lao r12,e__system__nind,40 - subs r9,r9,#4 - otoa r12,e__system__nind,40 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,40 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,40 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_18 apupd_19: - ldr r12,[sp] - lao r8,apupd_upd,18 - otoa r8,apupd_upd,18 - cmp r12,r8 - lao r8,ap_19,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,18 + otoa ASTACK_2,apupd_upd,18 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_19,0 bne ap_upd - ldr r8,[r9,#-76] - ldr r4,[r9,#-80] + ldr ASTACK_2,[ASTACK_PTR,#-76] + ldr BSTACK_0,[ASTACK_PTR,#-80] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_20 - lao r12,e__system__nind,41 - subs r9,r9,#4 - otoa r12,e__system__nind,41 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,41 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,41 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_19 apupd_20: - ldr r12,[sp] - lao r8,apupd_upd,19 - otoa r8,apupd_upd,19 - cmp r12,r8 - lao r8,ap_20,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,19 + otoa ASTACK_2,apupd_upd,19 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_20,0 bne ap_upd - ldr r8,[r9,#-80] - ldr r4,[r9,#-84] + ldr ASTACK_2,[ASTACK_PTR,#-80] + ldr BSTACK_0,[ASTACK_PTR,#-84] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_21 - lao r12,e__system__nind,42 - subs r9,r9,#4 - otoa r12,e__system__nind,42 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,42 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,42 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_20 apupd_21: - ldr r12,[sp] - lao r8,apupd_upd,20 - otoa r8,apupd_upd,20 - cmp r12,r8 - lao r8,ap_21,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,20 + otoa ASTACK_2,apupd_upd,20 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_21,0 bne ap_upd - ldr r8,[r9,#-84] - ldr r4,[r9,#-88] + ldr ASTACK_2,[ASTACK_PTR,#-84] + ldr BSTACK_0,[ASTACK_PTR,#-88] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_22 - lao r12,e__system__nind,43 - subs r9,r9,#4 - otoa r12,e__system__nind,43 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,43 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,43 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_21 apupd_22: - ldr r12,[sp] - lao r8,apupd_upd,21 - otoa r8,apupd_upd,21 - cmp r12,r8 - lao r8,ap_22,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,21 + otoa ASTACK_2,apupd_upd,21 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_22,0 bne ap_upd - ldr r8,[r9,#-88] - ldr r4,[r9,#-92] + ldr ASTACK_2,[ASTACK_PTR,#-88] + ldr BSTACK_0,[ASTACK_PTR,#-92] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_23 - lao r12,e__system__nind,44 - subs r9,r9,#4 - otoa r12,e__system__nind,44 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,44 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,44 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_22 apupd_23: - ldr r12,[sp] - lao r8,apupd_upd,22 - otoa r8,apupd_upd,22 - cmp r12,r8 - lao r8,ap_23,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,22 + otoa ASTACK_2,apupd_upd,22 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_23,0 bne ap_upd - ldr r8,[r9,#-92] - ldr r4,[r9,#-96] + ldr ASTACK_2,[ASTACK_PTR,#-92] + ldr BSTACK_0,[ASTACK_PTR,#-96] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_24 - lao r12,e__system__nind,45 - subs r9,r9,#4 - otoa r12,e__system__nind,45 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,45 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,45 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_23 apupd_24: - ldr r12,[sp] - lao r8,apupd_upd,23 - otoa r8,apupd_upd,23 - cmp r12,r8 - lao r8,ap_24,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,23 + otoa ASTACK_2,apupd_upd,23 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_24,0 bne ap_upd - ldr r8,[r9,#-96] - ldr r4,[r9,#-100] + ldr ASTACK_2,[ASTACK_PTR,#-96] + ldr BSTACK_0,[ASTACK_PTR,#-100] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_25 - lao r12,e__system__nind,46 - subs r9,r9,#4 - otoa r12,e__system__nind,46 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,46 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,46 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_24 apupd_25: - ldr r12,[sp] - lao r8,apupd_upd,24 - otoa r8,apupd_upd,24 - cmp r12,r8 - lao r8,ap_25,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,24 + otoa ASTACK_2,apupd_upd,24 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_25,0 bne ap_upd - ldr r8,[r9,#-100] - ldr r4,[r9,#-104] + ldr ASTACK_2,[ASTACK_PTR,#-100] + ldr BSTACK_0,[ASTACK_PTR,#-104] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_26 - lao r12,e__system__nind,47 - subs r9,r9,#4 - otoa r12,e__system__nind,47 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,47 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,47 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_25 apupd_26: - ldr r12,[sp] - lao r8,apupd_upd,25 - otoa r8,apupd_upd,25 - cmp r12,r8 - lao r8,ap_26,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,25 + otoa ASTACK_2,apupd_upd,25 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_26,0 bne ap_upd - ldr r8,[r9,#-104] - ldr r4,[r9,#-108] + ldr ASTACK_2,[ASTACK_PTR,#-104] + ldr BSTACK_0,[ASTACK_PTR,#-108] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_27 - lao r12,e__system__nind,48 - subs r9,r9,#4 - otoa r12,e__system__nind,48 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,48 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,48 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_26 apupd_27: - ldr r12,[sp] - lao r8,apupd_upd,26 - otoa r8,apupd_upd,26 - cmp r12,r8 - lao r8,ap_27,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,26 + otoa ASTACK_2,apupd_upd,26 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_27,0 bne ap_upd - ldr r8,[r9,#-108] - ldr r4,[r9,#-112] + ldr ASTACK_2,[ASTACK_PTR,#-108] + ldr BSTACK_0,[ASTACK_PTR,#-112] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_28 - lao r12,e__system__nind,49 - subs r9,r9,#4 - otoa r12,e__system__nind,49 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,49 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,49 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_27 apupd_28: - ldr r12,[sp] - lao r8,apupd_upd,27 - otoa r8,apupd_upd,27 - cmp r12,r8 - lao r8,ap_28,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,27 + otoa ASTACK_2,apupd_upd,27 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_28,0 bne ap_upd - ldr r8,[r9,#-112] - ldr r4,[r9,#-116] + ldr ASTACK_2,[ASTACK_PTR,#-112] + ldr BSTACK_0,[ASTACK_PTR,#-116] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_29 - lao r12,e__system__nind,50 - subs r9,r9,#4 - otoa r12,e__system__nind,50 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,50 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,50 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_28 apupd_29: - ldr r12,[sp] - lao r8,apupd_upd,28 - otoa r8,apupd_upd,28 - cmp r12,r8 - lao r8,ap_29,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,28 + otoa ASTACK_2,apupd_upd,28 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_29,0 bne ap_upd - ldr r8,[r9,#-116] - ldr r4,[r9,#-120] + ldr ASTACK_2,[ASTACK_PTR,#-116] + ldr BSTACK_0,[ASTACK_PTR,#-120] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_30 - lao r12,e__system__nind,51 - subs r9,r9,#4 - otoa r12,e__system__nind,51 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,51 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,51 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_29 apupd_30: - ldr r12,[sp] - lao r8,apupd_upd,29 - otoa r8,apupd_upd,29 - cmp r12,r8 - lao r8,ap_30,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,29 + otoa ASTACK_2,apupd_upd,29 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_30,0 bne ap_upd - ldr r8,[r9,#-120] - ldr r4,[r9,#-124] + ldr ASTACK_2,[ASTACK_PTR,#-120] + ldr BSTACK_0,[ASTACK_PTR,#-124] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_31 - lao r12,e__system__nind,52 - subs r9,r9,#4 - otoa r12,e__system__nind,52 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,52 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,52 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_30 apupd_31: - ldr r12,[sp] - lao r8,apupd_upd,30 - otoa r8,apupd_upd,30 - cmp r12,r8 - lao r8,ap_31,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,30 + otoa ASTACK_2,apupd_upd,30 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_31,0 bne ap_upd - ldr r8,[r9,#-124] - ldr r4,[r9,#-128] + ldr ASTACK_2,[ASTACK_PTR,#-124] + ldr BSTACK_0,[ASTACK_PTR,#-128] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_32 - lao r12,e__system__nind,53 - subs r9,r9,#4 - otoa r12,e__system__nind,53 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,53 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,53 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_31 apupd_32: - ldr r12,[sp] - lao r8,apupd_upd,31 - otoa r8,apupd_upd,31 - cmp r12,r8 - lao r8,ap_32,0 + ldr SCRATCH_REG,[sp] + lao ASTACK_2,apupd_upd,31 + otoa ASTACK_2,apupd_upd,31 + cmp SCRATCH_REG,ASTACK_2 + lao ASTACK_2,ap_32,0 bne ap_upd - ldr r8,[r9,#-128] - ldr r4,[r9,#-132] + ldr ASTACK_2,[ASTACK_PTR,#-128] + ldr BSTACK_0,[ASTACK_PTR,#-132] .align add lr,pc,#9 str lr,[sp,#-4]! bl move_33 - lao r12,e__system__nind,54 - subs r9,r9,#4 - otoa r12,e__system__nind,54 - str r12,[r8] - str r4,[r8,#4] + lao SCRATCH_REG,e__system__nind,54 + subs ASTACK_PTR,ASTACK_PTR,#4 + otoa SCRATCH_REG,e__system__nind,54 + str SCRATCH_REG,[ASTACK_2] + str BSTACK_0,[ASTACK_2,#4] b ap_32 ap_upd: @@ -2812,113 +2812,113 @@ ap_29__u0: ap_30__u0: ap_31__u0: ap_32__u0: - add r8,r8,pc + add ASTACK_2,ASTACK_2,pc .endif .align add lr,pc,#7 str lr,[sp,#-4]! - blx r8 + blx ASTACK_2 apupd_upd: - ldr r7,[r9,#-4] - subs r9,r9,#4 - ldr r4,[r6] - str r4,[r7] - ldr r4,[r6,#4] - str r4,[r7,#4] - ldr r4,[r6,#8] - mov r6,r7 - str r4,[r7,#8] + ldr ASTACK_1,[ASTACK_PTR,#-4] + subs ASTACK_PTR,ASTACK_PTR,#4 + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_1] + ldr BSTACK_0,[ASTACK_0,#4] + str BSTACK_0,[ASTACK_1,#4] + ldr BSTACK_0,[ASTACK_0,#8] + mov ASTACK_0,ASTACK_1 + str BSTACK_0,[ASTACK_1,#8] ldr pc,[sp],#4 move_33: - ldr r3,[r9,#-124] - str r3,[r9,#-128] + ldr BSTACK_1,[ASTACK_PTR,#-124] + str BSTACK_1,[ASTACK_PTR,#-128] move_32: - ldr r3,[r9,#-120] - str r3,[r9,#-124] + ldr BSTACK_1,[ASTACK_PTR,#-120] + str BSTACK_1,[ASTACK_PTR,#-124] move_31: - ldr r3,[r9,#-116] - str r3,[r9,#-120] + ldr BSTACK_1,[ASTACK_PTR,#-116] + str BSTACK_1,[ASTACK_PTR,#-120] move_30: - ldr r3,[r9,#-112] - str r3,[r9,#-116] + ldr BSTACK_1,[ASTACK_PTR,#-112] + str BSTACK_1,[ASTACK_PTR,#-116] move_29: - ldr r3,[r9,#-108] - str r3,[r9,#-112] + ldr BSTACK_1,[ASTACK_PTR,#-108] + str BSTACK_1,[ASTACK_PTR,#-112] move_28: - ldr r3,[r9,#-104] - str r3,[r9,#-108] + ldr BSTACK_1,[ASTACK_PTR,#-104] + str BSTACK_1,[ASTACK_PTR,#-108] move_27: - ldr r3,[r9,#-100] - str r3,[r9,#-104] + ldr BSTACK_1,[ASTACK_PTR,#-100] + str BSTACK_1,[ASTACK_PTR,#-104] move_26: - ldr r3,[r9,#-96] - str r3,[r9,#-100] + ldr BSTACK_1,[ASTACK_PTR,#-96] + str BSTACK_1,[ASTACK_PTR,#-100] move_25: - ldr r3,[r9,#-92] - str r3,[r9,#-96] + ldr BSTACK_1,[ASTACK_PTR,#-92] + str BSTACK_1,[ASTACK_PTR,#-96] move_24: - ldr r3,[r9,#-88] - str r3,[r9,#-92] + ldr BSTACK_1,[ASTACK_PTR,#-88] + str BSTACK_1,[ASTACK_PTR,#-92] move_23: - ldr r3,[r9,#-84] - str r3,[r9,#-88] + ldr BSTACK_1,[ASTACK_PTR,#-84] + str BSTACK_1,[ASTACK_PTR,#-88] move_22: - ldr r3,[r9,#-80] - str r3,[r9,#-84] + ldr BSTACK_1,[ASTACK_PTR,#-80] + str BSTACK_1,[ASTACK_PTR,#-84] move_21: - ldr r3,[r9,#-76] - str r3,[r9,#-80] + ldr BSTACK_1,[ASTACK_PTR,#-76] + str BSTACK_1,[ASTACK_PTR,#-80] move_20: - ldr r3,[r9,#-72] - str r3,[r9,#-76] + ldr BSTACK_1,[ASTACK_PTR,#-72] + str BSTACK_1,[ASTACK_PTR,#-76] move_19: - ldr r3,[r9,#-68] - str r3,[r9,#-72] + ldr BSTACK_1,[ASTACK_PTR,#-68] + str BSTACK_1,[ASTACK_PTR,#-72] move_18: - ldr r3,[r9,#-64] - str r3,[r9,#-68] + ldr BSTACK_1,[ASTACK_PTR,#-64] + str BSTACK_1,[ASTACK_PTR,#-68] move_17: - ldr r3,[r9,#-60] - str r3,[r9,#-64] + ldr BSTACK_1,[ASTACK_PTR,#-60] + str BSTACK_1,[ASTACK_PTR,#-64] move_16: - ldr r3,[r9,#-56] - str r3,[r9,#-60] + ldr BSTACK_1,[ASTACK_PTR,#-56] + str BSTACK_1,[ASTACK_PTR,#-60] move_15: - ldr r3,[r9,#-52] - str r3,[r9,#-56] + ldr BSTACK_1,[ASTACK_PTR,#-52] + str BSTACK_1,[ASTACK_PTR,#-56] move_14: - ldr r3,[r9,#-48] - str r3,[r9,#-52] + ldr BSTACK_1,[ASTACK_PTR,#-48] + str BSTACK_1,[ASTACK_PTR,#-52] move_13: - ldr r3,[r9,#-44] - str r3,[r9,#-48] + ldr BSTACK_1,[ASTACK_PTR,#-44] + str BSTACK_1,[ASTACK_PTR,#-48] move_12: - ldr r3,[r9,#-40] - str r3,[r9,#-44] + ldr BSTACK_1,[ASTACK_PTR,#-40] + str BSTACK_1,[ASTACK_PTR,#-44] move_11: - ldr r3,[r9,#-36] - str r3,[r9,#-40] + ldr BSTACK_1,[ASTACK_PTR,#-36] + str BSTACK_1,[ASTACK_PTR,#-40] move_10: - ldr r3,[r9,#-32] - str r3,[r9,#-36] + ldr BSTACK_1,[ASTACK_PTR,#-32] + str BSTACK_1,[ASTACK_PTR,#-36] move_9: - ldr r3,[r9,#-28] - str r3,[r9,#-32] + ldr BSTACK_1,[ASTACK_PTR,#-28] + str BSTACK_1,[ASTACK_PTR,#-32] move_8: - ldr r3,[r9,#-24] - str r3,[r9,#-28] + ldr BSTACK_1,[ASTACK_PTR,#-24] + str BSTACK_1,[ASTACK_PTR,#-28] move_7: - ldr r3,[r9,#-20] - str r3,[r9,#-24] - ldr r3,[r9,#-16] - str r3,[r9,#-20] - ldr r3,[r9,#-12] - str r3,[r9,#-16] - ldr r3,[r9,#-8] - str r3,[r9,#-12] - ldr r3,[r9,#-4] - str r3,[r9,#-8] + ldr BSTACK_1,[ASTACK_PTR,#-20] + str BSTACK_1,[ASTACK_PTR,#-24] + ldr BSTACK_1,[ASTACK_PTR,#-16] + str BSTACK_1,[ASTACK_PTR,#-20] + ldr BSTACK_1,[ASTACK_PTR,#-12] + str BSTACK_1,[ASTACK_PTR,#-16] + ldr BSTACK_1,[ASTACK_PTR,#-8] + str BSTACK_1,[ASTACK_PTR,#-12] + ldr BSTACK_1,[ASTACK_PTR,#-4] + str BSTACK_1,[ASTACK_PTR,#-8] ldr pc,[sp],#4 .ifdef PIC diff --git a/thumb2compact.s b/thumb2compact.s index 33a214e..314bb68 100644 --- a/thumb2compact.s +++ b/thumb2compact.s @@ -1,50 +1,49 @@ - COMPACT_MARK_WITH_STACK = 1 NO_BIT_INSTRUCTIONS = 1 @ mark used nodes and pointers in argument parts and link backward pointers - lao r12,heap_size_33,10 - ldo r4,r12,heap_size_33,10 - lsl r4,r4,#5 - lao r12,heap_size_32_33,1 - sto r4,r12,heap_size_32_33,1 -@ heap_size_32_33 in r2 - mov r2,r4 + lao SCRATCH_REG,heap_size_33,10 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,10 + lsl BSTACK_0,BSTACK_0,#5 + lao SCRATCH_REG,heap_size_32_33,1 + sto BSTACK_0,SCRATCH_REG,heap_size_32_33,1 +@ heap_size_32_33 in BSTACK_2 + mov BSTACK_2,BSTACK_0 - lao r12,heap_p3,11 - ldo r11,r12,heap_p3,11 -@ heap_p3 in r11 + lao SCRATCH_REG,heap_p3,11 + ldo ASTACK_3,SCRATCH_REG,heap_p3,11 +@ heap_p3 in ASTACK_3 .if COMPACT_MARK_WITH_STACK - add r9,sp,#-8000 + add ASTACK_PTR,sp,#-8000 .endif - lao r12,caf_list,2 - ldo r4,r12,caf_list,2 + lao SCRATCH_REG,caf_list,2 + ldo BSTACK_0,SCRATCH_REG,caf_list,2 .if COMPACT_MARK_WITH_STACK - lao r12,end_stack,1 - sto r9,r12,end_stack,1 -@ end_stack in r0 - mov r0,r9 + lao SCRATCH_REG,end_stack,1 + sto ASTACK_PTR,SCRATCH_REG,end_stack,1 +@ end_stack in BSTACK_4 + mov BSTACK_4,ASTACK_PTR .endif - cmp r4,#0 + cmp BSTACK_0,#0 beq end_mark_cafs .thumb_func mark_cafs_lp: - ldr r12,[r4,#-4] - str r12,[sp,#-4]! + ldr SCRATCH_REG,[BSTACK_0,#-4] + str SCRATCH_REG,[sp,#-4]! .if COMPACT_MARK_WITH_STACK - add r9,r4,#4 - ldr r4,[r4] - add r6,r9,r4,lsl #2 + add ASTACK_PTR,BSTACK_0,#4 + ldr BSTACK_0,[BSTACK_0] + add ASTACK_0,ASTACK_PTR,BSTACK_0,lsl #2 .else - add r8,r4,#4 - ldr r4,[r4] - add r6,r8,r4,lsl #2 + add ASTACK_2,BSTACK_0,#4 + ldr BSTACK_0,[BSTACK_0] + add ASTACK_0,ASTACK_2,BSTACK_0,lsl #2 .endif - lao r12,end_vector,13 - sto r6,r12,end_vector,13 + lao SCRATCH_REG,end_vector,13 + sto ASTACK_0,SCRATCH_REG,end_vector,13 .align add lr,pc,#9 @@ -55,24 +54,24 @@ mark_cafs_lp: bl mark_stack_nodes .endif - ldr r4,[sp],#4 - tst r4,r4 + ldr BSTACK_0,[sp],#4 + tst BSTACK_0,BSTACK_0 bne mark_cafs_lp .thumb_func end_mark_cafs: .if COMPACT_MARK_WITH_STACK - lao r12,stack_p,6 - ldo r9,r12,stack_p,6 + lao SCRATCH_REG,stack_p,6 + ldo ASTACK_PTR,SCRATCH_REG,stack_p,6 .else - lao r12,stack_p,6 - ldo r8,r12,stack_p,6 + lao SCRATCH_REG,stack_p,6 + ldo ASTACK_2,SCRATCH_REG,stack_p,6 .endif - lao r12,stack_top,4 - ldo r6,r12,stack_top,4 - lao r12,end_vector,14 - sto r6,r12,end_vector,14 + lao SCRATCH_REG,stack_top,4 + ldo ASTACK_0,SCRATCH_REG,stack_top,4 + lao SCRATCH_REG,end_vector,14 + sto ASTACK_0,SCRATCH_REG,end_vector,14 .align add lr,pc,#9 str lr,[sp,#-4]! @@ -119,113 +118,113 @@ end_mark_cafs: compact_heap: .ifdef FINALIZERS - lao r6,finalizer_list,3 - lao r7,free_finalizer_list,5 - otoa r6,finalizer_list,3 - otoa r7,free_finalizer_list,5 + lao ASTACK_0,finalizer_list,3 + lao ASTACK_1,free_finalizer_list,5 + otoa ASTACK_0,finalizer_list,3 + otoa ASTACK_1,free_finalizer_list,5 - ldr r8,[r6] + ldr ASTACK_2,[ASTACK_0] determine_free_finalizers_after_compact1: - laol r12,__Nil-4,__Nil_o_m4,5 - otoa r12,__Nil_o_m4,5 - cmp r8,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,5 + otoa SCRATCH_REG,__Nil_o_m4,5 + cmp ASTACK_2,SCRATCH_REG beq end_finalizers_after_compact1 - lao r12,heap_p3,12 - ldo r4,r12,heap_p3,12 - sub r4,r8,r4 - lsr r3,r4,#7 - and r4,r4,#31*4 - lsr r9,r4,#2 - mov r12,#1 - lsl r9,r12,r9 - - ldr r12,[r10,r3,lsl #2] - tst r9,r12 + lao SCRATCH_REG,heap_p3,12 + ldo BSTACK_0,SCRATCH_REG,heap_p3,12 + sub BSTACK_0,ASTACK_2,BSTACK_0 + lsr BSTACK_1,BSTACK_0,#7 + and BSTACK_0,BSTACK_0,#31*4 + lsr ASTACK_PTR,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_PTR,SCRATCH_REG,ASTACK_PTR + + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_PTR,SCRATCH_REG beq finalizer_not_used_after_compact1 - ldr r4,[r8] - mov r9,r8 + ldr BSTACK_0,[ASTACK_2] + mov ASTACK_PTR,ASTACK_2 b finalizer_find_descriptor .thumb_func finalizer_find_descriptor_lp: - and r4,r4,#-4 - mov r9,r4 - ldr r4,[r4] + and BSTACK_0,BSTACK_0,#-4 + mov ASTACK_PTR,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] .thumb_func finalizer_find_descriptor: - tst r4,#1 + tst BSTACK_0,#1 bne finalizer_find_descriptor_lp - laol r12,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,0 - sto r12,r9,e____system__kFinalizerGCTemp_o_2,0 + laol SCRATCH_REG,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,0 + sto SCRATCH_REG,ASTACK_PTR,e____system__kFinalizerGCTemp_o_2,0 - cmp r8,r6 + cmp ASTACK_2,ASTACK_0 bhi finalizer_no_reverse - ldr r4,[r8] - add r9,r6,#1 - str r9,[r8] - str r4,[r6] + ldr BSTACK_0,[ASTACK_2] + add ASTACK_PTR,ASTACK_0,#1 + str ASTACK_PTR,[ASTACK_2] + str BSTACK_0,[ASTACK_0] .thumb_func finalizer_no_reverse: - add r6,r8,#4 - ldr r8,[r8,#4] + add ASTACK_0,ASTACK_2,#4 + ldr ASTACK_2,[ASTACK_2,#4] b determine_free_finalizers_after_compact1 finalizer_not_used_after_compact1: - laol r12,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,1 - sto r12,r8,e____system__kFinalizerGCTemp_o_2,1 + laol SCRATCH_REG,e____system__kFinalizerGCTemp+2,e____system__kFinalizerGCTemp_o_2,1 + sto SCRATCH_REG,ASTACK_2,e____system__kFinalizerGCTemp_o_2,1 - str r8,[r7] - add r7,r8,#4 + str ASTACK_2,[ASTACK_1] + add ASTACK_1,ASTACK_2,#4 - ldr r8,[r8,#4] - str r8,[r6] + ldr ASTACK_2,[ASTACK_2,#4] + str ASTACK_2,[ASTACK_0] b determine_free_finalizers_after_compact1 end_finalizers_after_compact1: - str r8,[r7] + str ASTACK_2,[ASTACK_1] - lao r12,finalizer_list,4 - ldo r6,r12,finalizer_list,4 - laol r12,__Nil-4,__Nil_o_m4,6 - otoa r12,__Nil_o_m4,6 - cmp r6,r12 + lao SCRATCH_REG,finalizer_list,4 + ldo ASTACK_0,SCRATCH_REG,finalizer_list,4 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,6 + otoa SCRATCH_REG,__Nil_o_m4,6 + cmp ASTACK_0,SCRATCH_REG beq finalizer_list_empty - tst r6,#3 + tst ASTACK_0,#3 bne finalizer_list_already_reversed - ldr r4,[r6] - laol r12,finalizer_list+1,finalizer_list_o_1,0 - otoa r12,finalizer_list_o_1,0 - str r12,[r6] - lao r12,finalizer_list,5 - sto r4,r12,finalizer_list,5 + ldr BSTACK_0,[ASTACK_0] + laol SCRATCH_REG,finalizer_list+1,finalizer_list_o_1,0 + otoa SCRATCH_REG,finalizer_list_o_1,0 + str SCRATCH_REG,[ASTACK_0] + lao SCRATCH_REG,finalizer_list,5 + sto BSTACK_0,SCRATCH_REG,finalizer_list,5 .thumb_func finalizer_list_already_reversed: .thumb_func finalizer_list_empty: .if COMPACT_MARK_WITH_STACK - lao r9,free_finalizer_list,6 - otoa r9,free_finalizer_list,6 - ldr r6,[r9] + lao ASTACK_PTR,free_finalizer_list,6 + otoa ASTACK_PTR,free_finalizer_list,6 + ldr ASTACK_0,[ASTACK_PTR] .else - lao r8,free_finalizer_list,6 - otoa r8,free_finalizer_list,6 - ldr r6,[r8] + lao ASTACK_2,free_finalizer_list,6 + otoa ASTACK_2,free_finalizer_list,6 + ldr ASTACK_0,[ASTACK_2] .endif - laol r12,__Nil-4,__Nil_o_m4,7 - otoa r12,__Nil_o_m4,7 - cmp r6,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,7 + otoa SCRATCH_REG,__Nil_o_m4,7 + cmp ASTACK_0,SCRATCH_REG beq free_finalizer_list_empty - laol r6,free_finalizer_list+4,free_finalizer_list_o_4,0 - otoa r6,free_finalizer_list_o_4,0 - lao r12,end_vector,15 - sto r6,r12,end_vector,15 + laol ASTACK_0,free_finalizer_list+4,free_finalizer_list_o_4,0 + otoa ASTACK_0,free_finalizer_list_o_4,0 + lao SCRATCH_REG,end_vector,15 + sto ASTACK_0,SCRATCH_REG,end_vector,15 .if COMPACT_MARK_WITH_STACK .align add lr,pc,#9 @@ -241,40 +240,40 @@ finalizer_list_empty: free_finalizer_list_empty: .endif - lao r12,heap_size_33,11 - ldo r4,r12,heap_size_33,11 - mov r3,r4 - lsl r3,r3,#5 - - lao r12,heap_p3,13 - ldo r12,r12,heap_p3,13 - add r3,r3,r12 - - lao r12,end_heap_p3,0 - sto r3,r12,end_heap_p3,0 -@ end_heap_p3 in r0 - mov r0,r3 - - add r4,r4,#3 - lsr r4,r4,#2 -@ vector_counter in r2 - mov r2,r4 - - lao r12,heap_vector,9 - ldo r6,r12,heap_vector,9 -@ vector_p in r1 - mov r1,r6 - - mov r12,#-4 - rsb r3,r6,r12 - lao r12,neg_heap_vector_plus_4,0 - sto r3,r12,neg_heap_vector_plus_4,0 - - lao r12,heap_p3,14 - ldo r10,r12,heap_p3,14 - mov r9,#0 -@ heap_p3 in r11 - mov r11,r10 + lao SCRATCH_REG,heap_size_33,11 + ldo BSTACK_0,SCRATCH_REG,heap_size_33,11 + mov BSTACK_1,BSTACK_0 + lsl BSTACK_1,BSTACK_1,#5 + + lao SCRATCH_REG,heap_p3,13 + ldo SCRATCH_REG,SCRATCH_REG,heap_p3,13 + add BSTACK_1,BSTACK_1,SCRATCH_REG + + lao SCRATCH_REG,end_heap_p3,0 + sto BSTACK_1,SCRATCH_REG,end_heap_p3,0 +@ end_heap_p3 in BSTACK_4 + mov BSTACK_4,BSTACK_1 + + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 +@ vector_counter in BSTACK_2 + mov BSTACK_2,BSTACK_0 + + lao SCRATCH_REG,heap_vector,9 + ldo ASTACK_0,SCRATCH_REG,heap_vector,9 +@ vector_p in BSTACK_3 + mov BSTACK_3,ASTACK_0 + + mov SCRATCH_REG,#-4 + rsb BSTACK_1,ASTACK_0,SCRATCH_REG + lao SCRATCH_REG,neg_heap_vector_plus_4,0 + sto BSTACK_1,SCRATCH_REG,neg_heap_vector_plus_4,0 + + lao SCRATCH_REG,heap_p3,14 + ldo HEAP_PTR,SCRATCH_REG,heap_p3,14 + mov ASTACK_PTR,#0 +@ heap_p3 in ASTACK_3 + mov ASTACK_3,HEAP_PTR b skip_zeros @ d0,a0,a2: free @@ -282,930 +281,930 @@ free_finalizer_list_empty: find_non_zero_long: .thumb_func skip_zeros: - subs r2,r2,#1 + subs BSTACK_2,BSTACK_2,#1 bcc end_copy - ldr r9,[r1],#4 - cmp r9,#0 + ldr ASTACK_PTR,[BSTACK_3],#4 + cmp ASTACK_PTR,#0 beq skip_zeros @ a2: free .thumb_func end_skip_zeros: - lao r12,neg_heap_vector_plus_4,1 - ldo r8,r12,neg_heap_vector_plus_4,1 - add r8,r8,r1 + lao SCRATCH_REG,neg_heap_vector_plus_4,1 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,1 + add ASTACK_2,ASTACK_2,BSTACK_3 - add r8,r11,r8,lsl #5 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bsf_and_copy_nodes: - neg r12,r9 - and r12,r12,r9 - clz r3,r12 - rsb r3,r3,#31 + neg SCRATCH_REG,ASTACK_PTR + and SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + clz BSTACK_1,SCRATCH_REG + rsb BSTACK_1,BSTACK_1,#31 .thumb_func copy_nodes: - ldr r4,[r8,r3,lsl #2] + ldr BSTACK_0,[ASTACK_2,BSTACK_1,lsl #2] - bic r9,r9,r12 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - add r12,r8,#4 - add r6,r12,r3,lsl #2 - sub r4,r4,#1 + add SCRATCH_REG,ASTACK_2,#4 + add ASTACK_0,SCRATCH_REG,BSTACK_1,lsl #2 + sub BSTACK_0,BSTACK_0,#1 - tst r4,#2 + tst BSTACK_0,#2 beq begin_update_list_2 - ldr r3,[r4,#-10] - subs r4,r4,#2 + ldr BSTACK_1,[BSTACK_0,#-10] + subs BSTACK_0,BSTACK_0,#2 - tst r3,#1 + tst BSTACK_1,#1 beq end_list_2 find_descriptor_2: - and r3,r3,#-4 - ldr r3,[r3] - tst r3,#1 + and BSTACK_1,BSTACK_1,#-4 + ldr BSTACK_1,[BSTACK_1] + tst BSTACK_1,#1 bne find_descriptor_2 end_list_2: - mov r7,r3 - ldrh r3,[r3,#-2] - cmp r3,#256 + mov ASTACK_1,BSTACK_1 + ldrh BSTACK_1,[BSTACK_1,#-2] + cmp BSTACK_1,#256 blo no_record_arguments - ldrh r7,[r7,#-2+2] - subs r7,r7,#2 + ldrh ASTACK_1,[ASTACK_1,#-2+2] + subs ASTACK_1,ASTACK_1,#2 bhs copy_record_arguments_aa - sub r3,r3,#256 - sub r3,r3,#3 + sub BSTACK_1,BSTACK_1,#256 + sub BSTACK_1,BSTACK_1,#3 .thumb_func copy_record_arguments_all_b: - str r3,[sp,#-4]! - lao r12,heap_vector,10 - ldo r3,r12,heap_vector,10 + str BSTACK_1,[sp,#-4]! + lao SCRATCH_REG,heap_vector,10 + ldo BSTACK_1,SCRATCH_REG,heap_vector,10 update_up_list_1r: - mov r7,r4 - sub r4,r4,r11 + mov ASTACK_1,BSTACK_0 + sub BSTACK_0,BSTACK_0,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! - and r6,r4,#31*4 - lsr r4,r4,#7 - lsr r6,r6,#2 - mov r12,#1 - lsl r6,r12,r6 + and ASTACK_0,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_0,ASTACK_0,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 - ldr r4,[r3,r4,lsl #2] + ldr BSTACK_0,[BSTACK_1,BSTACK_0,lsl #2] - ands r4,r4,r6 + ands BSTACK_0,BSTACK_0,ASTACK_0 - ldr r6,[sp],#4 + ldr ASTACK_0,[sp],#4 beq copy_argument_part_1r - ldr r4,[r7] - str r10,[r7] - subs r4,r4,#3 + ldr BSTACK_0,[ASTACK_1] + str HEAP_PTR,[ASTACK_1] + subs BSTACK_0,BSTACK_0,#3 b update_up_list_1r copy_argument_part_1r: - ldr r4,[r7] - str r10,[r7] - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_1] + str HEAP_PTR,[ASTACK_1] + str BSTACK_0,[HEAP_PTR],#4 - sub r4,r6,r11 - lsr r4,r4,#2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + lsr BSTACK_0,BSTACK_0,#2 - mov r3,r4 - and r3,r3,#31 - cmp r3,#1 + mov BSTACK_1,BSTACK_0 + and BSTACK_1,BSTACK_1,#31 + cmp BSTACK_1,#1 bhs bit_in_this_word - sub r2,r2,#1 - ldr r9,[r1],#4 + sub BSTACK_2,BSTACK_2,#1 + ldr ASTACK_PTR,[BSTACK_3],#4 - lao r12,neg_heap_vector_plus_4,2 - ldo r8,r12,neg_heap_vector_plus_4,2 - add r8,r8,r1 - add r8,r11,r8,lsl #5 + lao SCRATCH_REG,neg_heap_vector_plus_4,2 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,2 + add ASTACK_2,ASTACK_2,BSTACK_3 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bit_in_this_word: - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 .thumb_func copy_b_record_argument_part_arguments: - ldr r4,[r6],#4 - str r4,[r10],#4 - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_b_record_argument_part_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func copy_record_arguments_aa: - mov r12,#(256+2)/2 - sub r3,r3,r7 - sub r3,r3,r12,lsl #1 + mov SCRATCH_REG,#(256+2)/2 + sub BSTACK_1,BSTACK_1,ASTACK_1 + sub BSTACK_1,BSTACK_1,SCRATCH_REG,lsl #1 - str r3,[sp,#-4]! - str r7,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + str ASTACK_1,[sp,#-4]! update_up_list_2r: - mov r7,r4 - ldr r4,[r7] - and r3,r4,#3 - subs r3,r3,#3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[ASTACK_1] + and BSTACK_1,BSTACK_0,#3 + subs BSTACK_1,BSTACK_1,#3 bne copy_argument_part_2r - str r10,[r7] - subs r4,r4,#3 + str HEAP_PTR,[ASTACK_1] + subs BSTACK_0,BSTACK_0,#3 b update_up_list_2r copy_argument_part_2r: - str r10,[r7] - cmp r4,r6 + str HEAP_PTR,[ASTACK_1] + cmp BSTACK_0,ASTACK_0 blo copy_record_argument_2 .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bhs copy_record_argument_2 .endif - mov r7,r4 - ldr r4,[r7] - add r3,r10,#1 - str r3,[r7] + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[ASTACK_1] + add BSTACK_1,HEAP_PTR,#1 + str BSTACK_1,[ASTACK_1] copy_record_argument_2: - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 - ldr r3,[sp],#4 - subs r3,r3,#1 + ldr BSTACK_1,[sp],#4 + subs BSTACK_1,BSTACK_1,#1 bcc no_pointers_in_record .thumb_func copy_record_pointers: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo copy_record_pointers_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs copy_record_pointers_2 .endif - ldr r4,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 - mov r7,r4 + ldr BSTACK_0,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 + mov ASTACK_1,BSTACK_0 copy_record_pointers_2: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_record_pointers .thumb_func no_pointers_in_record: - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcc no_non_pointers_in_record .thumb_func copy_non_pointers_in_record: - ldr r4,[r6],#4 - str r4,[r10],#4 - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_non_pointers_in_record .thumb_func no_non_pointers_in_record: - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func no_record_arguments: - subs r3,r3,#3 + subs BSTACK_1,BSTACK_1,#3 update_up_list_2: - mov r7,r4 - ldr r4,[r4] - add r4,r4,#1 - str r10,[r7] - tst r4,#3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] + add BSTACK_0,BSTACK_0,#1 + str HEAP_PTR,[ASTACK_1] + tst BSTACK_0,#3 bne copy_argument_part_2 - subs r4,r4,#4 + subs BSTACK_0,BSTACK_0,#4 b update_up_list_2 copy_argument_part_2: - sub r4,r4,#1 - cmp r4,r6 + sub BSTACK_0,BSTACK_0,#1 + cmp BSTACK_0,ASTACK_0 bcc copy_arguments_1 .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bcs copy_arguments_1 .endif - mov r7,r4 - ldr r4,[r4] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 copy_arguments_1: - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 .thumb_func copy_argument_part_arguments: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc copy_arguments_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs copy_arguments_2 .endif - ldr r4,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 - mov r7,r4 + ldr BSTACK_0,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 + mov ASTACK_1,BSTACK_0 copy_arguments_2: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs copy_argument_part_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long update_list_2_: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 update_list_2: - str r10,[r7] + str HEAP_PTR,[ASTACK_1] begin_update_list_2: - mov r7,r4 - ldr r4,[r4] + mov ASTACK_1,BSTACK_0 + ldr BSTACK_0,[BSTACK_0] update_list__2: - tst r4,#1 + tst BSTACK_0,#1 beq end_update_list_2 - tst r4,#2 + tst BSTACK_0,#2 beq update_list_2_ - add r7,r4,#-3 - ldr r4,[r4,#-3] + add ASTACK_1,BSTACK_0,#-3 + ldr BSTACK_0,[BSTACK_0,#-3] b update_list__2 end_update_list_2: - str r10,[r7] + str HEAP_PTR,[ASTACK_1] - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 - tst r4,#2 + tst BSTACK_0,#2 beq move_lazy_node - ldrh r3,[r4,#-2] - tst r3,r3 + ldrh BSTACK_1,[BSTACK_0,#-2] + tst BSTACK_1,BSTACK_1 beq move_hnf_0 - cmp r3,#256 + cmp BSTACK_1,#256 bhs move_record - subs r3,r3,#2 + subs BSTACK_1,BSTACK_1,#2 bcc move_hnf_1 beq move_hnf_2 move_hnf_3: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_3_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_3_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_3_1: - str r7,[r10] + str ASTACK_1,[HEAP_PTR] - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_3_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_3_2 .endif - add r4,r10,#4+2+1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#4+2+1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_3_2: - str r7,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_2: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_2_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_2_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_2_1: - str r7,[r10] + str ASTACK_1,[HEAP_PTR] - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_2_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_2_2 .endif - add r4,r10,#4+1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#4+1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_2_2: - str r7,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_1: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_hnf_1_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_hnf_1_ .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_hnf_1_: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_record: - mov r12,#258/2 - subs r3,r3,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs BSTACK_1,BSTACK_1,SCRATCH_REG,lsl #1 blo move_record_1 beq move_record_2 move_record_3: - ldrh r3,[r4,#-2+2] - subs r3,r3,#1 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + subs BSTACK_1,BSTACK_1,#1 bhi move_hnf_3 - ldr r7,[r6],#4 + ldr ASTACK_1,[ASTACK_0],#4 blo move_record_3_1b move_record_3_1a: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 blo move_record_3_1b .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_3_1b .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_3_1b: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo move_record_3_2 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_3_2 .endif - str r8,[sp,#-4]! - sub r4,r7,r11 - - lao r12,heap_vector,11 - ldo r3,r12,heap_vector,11 - add r4,r4,#4 - and r8,r4,#31*4 - lsr r4,r4,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - - ldr r12,[r3,r4,lsl #2] - tst r8,r12 + str ASTACK_2,[sp,#-4]! + sub BSTACK_0,ASTACK_1,ASTACK_3 + + lao SCRATCH_REG,heap_vector,11 + ldo BSTACK_1,SCRATCH_REG,heap_vector,11 + add BSTACK_0,BSTACK_0,#4 + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + tst ASTACK_2,SCRATCH_REG beq not_linked_record_argument_part_3_b - sub r4,r10,r11 - - and r8,r4,#31*4 - lsr r4,r4,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r12,[r3,r4,lsl #2] - orr r12,r12,r8 - str r12,[r3,r4,lsl #2] - ldr r8,[sp],#4 + sub BSTACK_0,HEAP_PTR,ASTACK_3 + + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + ldr ASTACK_2,[sp],#4 b linked_record_argument_part_3_b not_linked_record_argument_part_3_b: - ldr r12,[r3,r4,lsl #2] - orr r12,r12,r8 - str r12,[r3,r4,lsl #2] + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] - sub r4,r10,r11 + sub BSTACK_0,HEAP_PTR,ASTACK_3 - and r8,r4,#31*4 - lsr r4,r4,#7 + and ASTACK_2,BSTACK_0,#31*4 + lsr BSTACK_0,BSTACK_0,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r12,r8 - mvn r8,r12 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,ASTACK_2 + mvn ASTACK_2,SCRATCH_REG - ldr r12,[r3,r4,lsl #2] - and r12,r12,r8 - str r12,[r3,r4,lsl #2] - ldr r8,[sp],#4 + ldr SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + and SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[BSTACK_1,BSTACK_0,lsl #2] + ldr ASTACK_2,[sp],#4 linked_record_argument_part_3_b: - ldr r3,[r7] - add r4,r10,#2+1 - str r4,[r7] - mov r7,r3 + ldr BSTACK_1,[ASTACK_1] + add BSTACK_0,HEAP_PTR,#2+1 + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_3_2: - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - sub r3,r6,r11 - lsr r3,r3,#2 - subs r3,r3,#1 - and r3,r3,#31 - cmp r3,#2 + sub BSTACK_1,ASTACK_0,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + subs BSTACK_1,BSTACK_1,#1 + and BSTACK_1,BSTACK_1,#31 + cmp BSTACK_1,#2 blo bit_in_next_word - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func bit_in_next_word: - sub r2,r2,#1 - ldr r9,[r1],#4 + sub BSTACK_2,BSTACK_2,#1 + ldr ASTACK_PTR,[BSTACK_3],#4 - mov r12,#1 - lsl r12,r12,r3 - bic r9,r9,r12 + mov SCRATCH_REG,#1 + lsl SCRATCH_REG,SCRATCH_REG,BSTACK_1 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - cmp r9,#0 + cmp ASTACK_PTR,#0 beq skip_zeros b end_skip_zeros move_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi move_hnf_2 blo move_real_or_file move_record_2_ab: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 blo move_record_2_1 .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bhs move_record_2_1 .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_record_2_1: - str r7,[r10] - ldr r3,[r6],#4 - str r3,[r10,#4] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR] + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_record_1: - ldrh r3,[r4,#-2+2] - tst r3,r3 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + tst BSTACK_1,BSTACK_1 bne move_hnf_1 b move_int_bool_or_char .thumb_func move_real_or_file: - ldr r4,[r6],#4 - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 .thumb_func move_int_bool_or_char: - ldr r4,[r6],#4 - str r4,[r10],#4 + ldr BSTACK_0,[ASTACK_0],#4 + str BSTACK_0,[HEAP_PTR],#4 copy_normal_hnf_0: - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_hnf_0: - laol r12,INT+2,INT_o_2,13 - otoa r12,INT_o_2,13 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,13 + otoa SCRATCH_REG,INT_o_2,13 + cmp BSTACK_0,SCRATCH_REG blo move_real_file_string_or_array - laol r12,CHAR+2,CHAR_o_2,8 - otoa r12,CHAR_o_2,8 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,8 + otoa SCRATCH_REG,CHAR_o_2,8 + cmp BSTACK_0,SCRATCH_REG bls move_int_bool_or_char .ifdef DLL move_normal_hnf_0: .endif - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_real_file_string_or_array: - laol r12,__STRING__+2,__STRING___o_2,10 - otoa r12,__STRING___o_2,10 - cmp r4,r12 + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,10 + otoa SCRATCH_REG,__STRING___o_2,10 + cmp BSTACK_0,SCRATCH_REG bhi move_real_or_file bne move_array - ldr r4,[r6] - add r4,r4,#3 - lsr r4,r4,#2 + ldr BSTACK_0,[ASTACK_0] + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 cp_s_arg_lp3: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs cp_s_arg_lp3 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_array: .ifdef DLL - laol r12,__ARRAY__+2,__ARRAY___o_2,2 - otoa r12,__ARRAY___o_2,2 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,2 + otoa SCRATCH_REG,__ARRAY___o_2,2 + cmp BSTACK_0,SCRATCH_REG blo move_normal_hnf_0 .endif - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_end_array_bit .thumb_func skip_zeros_a: - ldr r9,[r1],#4 - sub r2,r2,#1 - cmp r9,#0 + ldr ASTACK_PTR,[BSTACK_3],#4 + sub BSTACK_2,BSTACK_2,#1 + cmp ASTACK_PTR,#0 beq skip_zeros_a - lao r12,neg_heap_vector_plus_4,3 - ldo r8,r12,neg_heap_vector_plus_4,3 - add r8,r8,r1 + lao SCRATCH_REG,neg_heap_vector_plus_4,3 + ldo ASTACK_2,SCRATCH_REG,neg_heap_vector_plus_4,3 + add ASTACK_2,ASTACK_2,BSTACK_3 - add r8,r11,r8,lsl #5 + add ASTACK_2,ASTACK_3,ASTACK_2,lsl #5 .thumb_func bsf_and_end_array_bit: - neg r12,r9 - and r12,r12,r9 - clz r3,r12 - rsb r3,r3,#31 + neg SCRATCH_REG,ASTACK_PTR + and SCRATCH_REG,SCRATCH_REG,ASTACK_PTR + clz BSTACK_1,SCRATCH_REG + rsb BSTACK_1,BSTACK_1,#31 .thumb_func end_array_bit: - bic r9,r9,r12 + bic ASTACK_PTR,ASTACK_PTR,SCRATCH_REG - add r3,r8,r3,lsl #2 + add BSTACK_1,ASTACK_2,BSTACK_1,lsl #2 - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bne move_a_array .thumb_func move_b_array: - ldr r7,[r6] - str r7,[r10] - ldr r3,[r6,#4]! - ldrh r4,[r3,#-2] - add r10,r10,#4 - tst r4,r4 + ldr ASTACK_1,[ASTACK_0] + str ASTACK_1,[HEAP_PTR] + ldr BSTACK_1,[ASTACK_0,#4]! + ldrh BSTACK_0,[BSTACK_1,#-2] + add HEAP_PTR,HEAP_PTR,#4 + tst BSTACK_0,BSTACK_0 beq move_strict_basic_array - subs r4,r4,#256 - mul r7,r4,r7 - mov r4,r7 + subs BSTACK_0,BSTACK_0,#256 + mul ASTACK_1,BSTACK_0,ASTACK_1 + mov BSTACK_0,ASTACK_1 b cp_s_arg_lp3 .thumb_func move_strict_basic_array: - mov r4,r7 - laol r12,INT+2,INT_o_2,14 - otoa r12,INT_o_2,14 - cmp r3,r12 + mov BSTACK_0,ASTACK_1 + laol SCRATCH_REG,INT+2,INT_o_2,14 + otoa SCRATCH_REG,INT_o_2,14 + cmp BSTACK_1,SCRATCH_REG beq cp_s_arg_lp3 - laol r12,BOOL+2,BOOL_o_2,7 - otoa r12,BOOL_o_2,7 - cmp r3,r12 + laol SCRATCH_REG,BOOL+2,BOOL_o_2,7 + otoa SCRATCH_REG,BOOL_o_2,7 + cmp BSTACK_1,SCRATCH_REG beq move_bool_array - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 b cp_s_arg_lp3 .thumb_func move_bool_array: - add r4,r4,#3 - lsr r4,r4,#2 + add BSTACK_0,BSTACK_0,#3 + lsr BSTACK_0,BSTACK_0,#2 b cp_s_arg_lp3 .thumb_func move_a_array: - mov r7,r3 - subs r3,r3,r6 - lsr r3,r3,#2 + mov ASTACK_1,BSTACK_1 + subs BSTACK_1,BSTACK_1,ASTACK_0 + lsr BSTACK_1,BSTACK_1,#2 - str r9,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 blo end_array - ldr r9,[r6] - ldr r4,[r7,#-4] - str r9,[r7,#-4] - str r4,[r10] - ldr r4,[r7] - ldr r9,[r6,#4] - add r6,r6,#8 - str r9,[r7] - str r4,[r10,#4] - add r10,r10,#8 - tst r4,r4 + ldr ASTACK_PTR,[ASTACK_0] + ldr BSTACK_0,[ASTACK_1,#-4] + str ASTACK_PTR,[ASTACK_1,#-4] + str BSTACK_0,[HEAP_PTR] + ldr BSTACK_0,[ASTACK_1] + ldr ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_PTR,[ASTACK_1] + str BSTACK_0,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 + tst BSTACK_0,BSTACK_0 beq st_move_array_lp - ldrh r9,[r4,#-2+2] - ldrh r4,[r4,#-2] - subs r4,r4,#256 - cmp r4,r9 + ldrh ASTACK_PTR,[BSTACK_0,#-2+2] + ldrh BSTACK_0,[BSTACK_0,#-2] + subs BSTACK_0,BSTACK_0,#256 + cmp BSTACK_0,ASTACK_PTR beq st_move_array_lp .thumb_func move_array_ab: - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! - ldr r7,[r10,#-8] - mov r3,r9 - mul r7,r4,r7 - lsl r7,r7,#2 + ldr ASTACK_1,[HEAP_PTR,#-8] + mov BSTACK_1,ASTACK_PTR + mul ASTACK_1,BSTACK_0,ASTACK_1 + lsl ASTACK_1,ASTACK_1,#2 - subs r4,r4,r3 - add r7,r7,r6 + subs BSTACK_0,BSTACK_0,BSTACK_1 + add ASTACK_1,ASTACK_1,ASTACK_0 .align add lr,pc,#9 str lr,[sp,#-4]! bl reorder - ldr r6,[sp],#4 - subs r3,r3,#1 - subs r4,r4,#1 + ldr ASTACK_0,[sp],#4 + subs BSTACK_1,BSTACK_1,#1 + subs BSTACK_0,BSTACK_0,#1 - str r3,[sp,#-4]! - str r4,[sp,#-4]! - ldr r12,[r10,#-8] - str r12,[sp,#-4]! + str BSTACK_1,[sp,#-4]! + str BSTACK_0,[sp,#-4]! + ldr SCRATCH_REG,[HEAP_PTR,#-8] + str SCRATCH_REG,[sp,#-4]! b st_move_array_lp_ab move_array_ab_lp1: - ldr r4,[sp,#8] + ldr BSTACK_0,[sp,#8] .thumb_func move_array_ab_a_elements: - ldr r3,[r6],#4 - cmp r3,r6 + ldr BSTACK_1,[ASTACK_0],#4 + cmp BSTACK_1,ASTACK_0 blo move_array_element_ab .ifdef SHARE_CHAR_INT - cmp r3,r0 + cmp BSTACK_1,BSTACK_4 bcs move_array_element_ab .endif - mov r7,r3 - ldr r3,[r7] - add r10,r10,#1 - str r10,[r7] - subs r10,r10,#1 + mov ASTACK_1,BSTACK_1 + ldr BSTACK_1,[ASTACK_1] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + subs HEAP_PTR,HEAP_PTR,#1 .thumb_func move_array_element_ab: - str r3,[r10],#4 - subs r4,r4,#1 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs move_array_ab_a_elements - ldr r4,[sp,#4] + ldr BSTACK_0,[sp,#4] .thumb_func move_array_ab_b_elements: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bcs move_array_ab_b_elements .thumb_func st_move_array_lp_ab: - ldr r12,[sp] - subs r12,r12,#1 - str r12,[sp] + ldr SCRATCH_REG,[sp] + subs SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[sp] bcs move_array_ab_lp1 add sp,sp,#12 b end_array move_array_lp1: - ldr r4,[r6],#4 - add r10,r10,#4 - cmp r4,r6 + ldr BSTACK_0,[ASTACK_0],#4 + add HEAP_PTR,HEAP_PTR,#4 + cmp BSTACK_0,ASTACK_0 blo move_array_element .ifdef SHARE_CHAR_INT - cmp r4,r0 + cmp BSTACK_0,BSTACK_4 bcs move_array_element .endif - ldr r9,[r4] - mov r7,r4 - str r9,[r10,#-4] - add r4,r10,#-4+1 - str r4,[r7] + ldr ASTACK_PTR,[BSTACK_0] + mov ASTACK_1,BSTACK_0 + str ASTACK_PTR,[HEAP_PTR,#-4] + add BSTACK_0,HEAP_PTR,#-4+1 + str BSTACK_0,[ASTACK_1] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcs move_array_lp1 b end_array .thumb_func move_array_element: - str r4,[r10,#-4] + str BSTACK_0,[HEAP_PTR,#-4] .thumb_func st_move_array_lp: - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcs move_array_lp1 .thumb_func end_array: - ldr r9,[sp],#4 + ldr ASTACK_PTR,[sp],#4 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_lazy_node: - mov r7,r4 - ldr r3,[r7,#-4] - tst r3,r3 + mov ASTACK_1,BSTACK_0 + ldr BSTACK_1,[ASTACK_1,#-4] + tst BSTACK_1,BSTACK_1 beq move_lazy_node_0 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 ble move_lazy_node_1 - cmp r3,#256 + cmp BSTACK_1,#256 bge move_closure_with_unboxed_arguments .thumb_func move_lazy_node_arguments: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_lazy_node_arguments_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_lazy_node_arguments_ .endif - ldr r4,[r7] - str r4,[r10] - add r4,r10,#1 - add r10,r10,#4 - str r4,[r7] - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_1] + str BSTACK_0,[HEAP_PTR] + add BSTACK_0,HEAP_PTR,#1 + add HEAP_PTR,HEAP_PTR,#4 + str BSTACK_0,[ASTACK_1] + subs BSTACK_1,BSTACK_1,#1 bcs move_lazy_node_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_lazy_node_arguments_: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs move_lazy_node_arguments - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_lazy_node_1: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_lazy_node_1_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_lazy_node_1_ .endif - add r4,r10,#1 - ldr r3,[r7] - str r4,[r7] - mov r7,r3 + add BSTACK_0,HEAP_PTR,#1 + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + mov ASTACK_1,BSTACK_1 move_lazy_node_1_: - str r7,[r10] - add r10,r10,#8 + str ASTACK_1,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_lazy_node_0: - add r10,r10,#8 + add HEAP_PTR,HEAP_PTR,#8 - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long .thumb_func move_closure_with_unboxed_arguments: beq move_closure_with_unboxed_arguments_1 - add r3,r3,#1 - mov r4,r3 - and r3,r3,#255 - lsr r4,r4,#8 - subs r3,r3,r4 + add BSTACK_1,BSTACK_1,#1 + mov BSTACK_0,BSTACK_1 + and BSTACK_1,BSTACK_1,#255 + lsr BSTACK_0,BSTACK_0,#8 + subs BSTACK_1,BSTACK_1,BSTACK_0 beq move_non_pointers_of_closure - str r4,[sp,#-4]! + str BSTACK_0,[sp,#-4]! .thumb_func move_closure_with_unboxed_arguments_lp: - ldr r7,[r6],#4 - cmp r7,r6 + ldr ASTACK_1,[ASTACK_0],#4 + cmp ASTACK_1,ASTACK_0 bcc move_closure_with_unboxed_arguments_ .ifdef SHARE_CHAR_INT - cmp r7,r0 + cmp ASTACK_1,BSTACK_4 bcs move_closure_with_unboxed_arguments_ .endif - ldr r4,[r7] - str r4,[r10] - add r4,r10,#1 - add r10,r10,#4 - str r4,[r7] - subs r3,r3,#1 + ldr BSTACK_0,[ASTACK_1] + str BSTACK_0,[HEAP_PTR] + add BSTACK_0,HEAP_PTR,#1 + add HEAP_PTR,HEAP_PTR,#4 + str BSTACK_0,[ASTACK_1] + subs BSTACK_1,BSTACK_1,#1 bne move_closure_with_unboxed_arguments_lp - ldr r4,[sp],#4 + ldr BSTACK_0,[sp],#4 b move_non_pointers_of_closure .thumb_func move_closure_with_unboxed_arguments_: - str r7,[r10],#4 - subs r3,r3,#1 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bne move_closure_with_unboxed_arguments_lp - ldr r4,[sp],#4 + ldr BSTACK_0,[sp],#4 .thumb_func move_non_pointers_of_closure: - ldr r3,[r6],#4 - str r3,[r10],#4 - subs r4,r4,#1 + ldr BSTACK_1,[ASTACK_0],#4 + str BSTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bne move_non_pointers_of_closure - cmp r9,#0 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long move_closure_with_unboxed_arguments_1: - ldr r4,[r6] - str r4,[r10] - add r10,r10,#8 - cmp r9,#0 + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,#8 + cmp ASTACK_PTR,#0 bne bsf_and_copy_nodes b find_non_zero_long @@ -1259,20 +1258,20 @@ move_closure_with_unboxed_arguments_1: end_copy: .ifdef FINALIZERS - lao r12,finalizer_list,6 - ldo r6,r12,finalizer_list,6 + lao SCRATCH_REG,finalizer_list,6 + ldo ASTACK_0,SCRATCH_REG,finalizer_list,6 .thumb_func restore_finalizer_descriptors: - laol r12,__Nil-4,__Nil_o_m4,8 - otoa r12,__Nil_o_m4,8 - cmp r6,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,8 + otoa SCRATCH_REG,__Nil_o_m4,8 + cmp ASTACK_0,SCRATCH_REG beq end_restore_finalizer_descriptors - laol r12,e____system__kFinalizer+2,e____system__kFinalizer_o_2,0 - otoa r12,e____system__kFinalizer_o_2,0 - str r12,[r6] - ldr r6,[r6,#4] + laol SCRATCH_REG,e____system__kFinalizer+2,e____system__kFinalizer_o_2,0 + otoa SCRATCH_REG,e____system__kFinalizer_o_2,0 + str SCRATCH_REG,[ASTACK_0] + ldr ASTACK_0,[ASTACK_0,#4] b restore_finalizer_descriptors .thumb_func diff --git a/thumb2compact_rmark.s b/thumb2compact_rmark.s index 8680086..ab0ab1b 100644 --- a/thumb2compact_rmark.s +++ b/thumb2compact_rmark.s @@ -1,359 +1,358 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 rmark_stack_nodes1: - ldr r3,[r6] - add r4,r9,#1 - str r3,[r9] - str r4,[r6] + ldr BSTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#1 + str BSTACK_1,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_next_stack_node: - add r9,r9,#4 + add ASTACK_PTR,ASTACK_PTR,#4 rmark_stack_nodes: - lao r12,end_vector,16 - ldo r12,r12,end_vector,16 - cmp r9,r12 + lao SCRATCH_REG,end_vector,16 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,16 + cmp ASTACK_PTR,SCRATCH_REG beq end_rmark_nodes rmark_more_stack_nodes: - ldr r6,[r9] + ldr ASTACK_0,[ASTACK_PTR] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_stack_node - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r8,[r10,r3,lsl #2] - tst r8,r4 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,BSTACK_0 bne rmark_stack_nodes1 - orr r8,r8,r4 - str r8,[r10,r3,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] - ands lr,r6,#1 + ands lr,ASTACK_0,#1 it eq - ldreq r4,[r6] + ldreq BSTACK_0,[ASTACK_0] it ne - ldrne r4,[r6,#-1] + ldrne BSTACK_0,[ASTACK_0,#-1] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_stack_node - add r9,r9,#4 - lao r12,end_vector,17 - ldo r12,r12,end_vector,17 - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + lao SCRATCH_REG,end_vector,17 + ldo SCRATCH_REG,SCRATCH_REG,end_vector,17 + cmp ASTACK_PTR,SCRATCH_REG bne rmark_more_stack_nodes ldr pc,[sp],#4 rmark_stack_node: subs sp,sp,#8 - str r4,[r9] - add r8,r9,#1 - str r9,[sp,#4] - mov r3,#-1 - mov r12,#0 - str r12,[sp] - str r8,[r6] + str BSTACK_0,[ASTACK_PTR] + add ASTACK_2,ASTACK_PTR,#1 + str ASTACK_PTR,[sp,#4] + mov BSTACK_1,#-1 + mov SCRATCH_REG,#0 + str SCRATCH_REG,[sp] + str ASTACK_2,[ASTACK_0] b rmark_no_reverse rmark_node_d1: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node b rmark_node_ rmark_hnf_2: - add r3,r6,#4 - ldr r4,[r6,#4] + add BSTACK_1,ASTACK_0,#4 + ldr BSTACK_0,[ASTACK_0,#4] sub sp,sp,#8 - mov r9,r6 - ldr r6,[r6] + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] - str r3,[sp,#4] - str r4,[sp] + str BSTACK_1,[sp,#4] + str BSTACK_0,[sp] - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal rmark_node: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r9 + mov BSTACK_1,ASTACK_PTR rmark_node_: - lsr r7,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - ldr r8,[r10,r7,lsl #2] - mov r12,#1 - lsl r4,r12,r4 - tst r8,r4 + lsr ASTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + ldr ASTACK_2,[HEAP_PTR,ASTACK_1,lsl #2] + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + tst ASTACK_2,BSTACK_0 bne rmark_reverse_and_mark_next_node - orr r8,r8,r4 - str r8,[r10,r7,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,ASTACK_1,lsl #2] - ldr r4,[r6] + ldr BSTACK_0,[ASTACK_0] rmark_arguments: - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse - add r8,r9,#1 - str r4,[r9] - str r8,[r6] + add ASTACK_2,ASTACK_PTR,#1 + str BSTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_0] rmark_no_reverse: - tst r4,#2 + tst BSTACK_0,#2 beq rmark_lazy_node - ldrh r8,[r4,#-2] - tst r8,r8 + ldrh ASTACK_2,[BSTACK_0,#-2] + tst ASTACK_2,ASTACK_2 beq rmark_hnf_0 - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs rmark_record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq rmark_hnf_2 bcc rmark_hnf_1 rmark_hnf_3: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] rmark_hnf_3_: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal_ - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r3,lsl #2] - tst r4,r12 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst BSTACK_0,SCRATCH_REG bne rmark_shared_argument_part - ldr r12,[r10,r3,lsl #2] - orr r12,r12,r4 - str r12,[r10,r3,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] rmark_no_shared_argument_part: subs sp,sp,#8 - str r6,[sp,#4] - add r9,r6,#4 - ldr r6,[r6] - add r7,r7,r8,lsl #2 - str r6,[sp] + str ASTACK_0,[sp,#4] + add ASTACK_PTR,ASTACK_0,#4 + ldr ASTACK_0,[ASTACK_0] + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + str ASTACK_0,[sp] rmark_push_hnf_args: - ldr r3,[r7] + ldr BSTACK_1,[ASTACK_1] subs sp,sp,#8 - str r7,[sp,#4] - subs r7,r7,#4 - str r3,[sp] + str ASTACK_1,[sp,#4] + subs ASTACK_1,ASTACK_1,#4 + str BSTACK_1,[sp] - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 bgt rmark_push_hnf_args - ldr r6,[r7] + ldr ASTACK_0,[ASTACK_1] - cmp r7,r9 + cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer - add r8,r9,#3 - str r6,[r9] - str r8,[r7] + add ASTACK_2,ASTACK_PTR,#3 + str ASTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_1] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r7 + mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_no_reverse_argument_pointer: - mov r9,r7 + mov ASTACK_PTR,ASTACK_1 b rmark_node rmark_shared_argument_part: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmark_hnf_1 - ldr r3,[r7] - add r4,r6,#4+2+1 - str r4,[r7] - str r3,[r6,#4] + ldr BSTACK_1,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0,#4] b rmark_hnf_1 rmark_record: - mov r12,#258/2 - subs r8,r8,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs ASTACK_2,ASTACK_2,SCRATCH_REG,lsl #1 beq rmark_record_2 blo rmark_record_1 rmark_record_3: - ldrh r8,[r4,#-2+2] - ldr r7,[r6,#4] - subs r8,r8,#1 + ldrh ASTACK_2,[BSTACK_0,#-2+2] + ldr ASTACK_1,[ASTACK_0,#4] + subs ASTACK_2,ASTACK_2,#1 blo rmark_record_3_bb beq rmark_record_3_ab - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 beq rmark_record_3_aab b rmark_hnf_3_ rmark_record_3_bb: - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmark_next_node - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word1 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmark_bit_in_same_word1: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmark_not_yet_linked_bb - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#2*4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] + add BSTACK_0,BSTACK_0,#2*4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmark_not_yet_linked_bb: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#8+2+1 - str r8,[r6,#8] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#8+2+1 + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_0,[ASTACK_1] b rmark_next_node rmark_record_3_ab: - sub r4,r7,r11 - - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] - - cmp r7,r6 + sub BSTACK_0,ASTACK_1,ASTACK_3 + + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + + cmp ASTACK_1,ASTACK_0 bhi rmark_hnf_1 - adds r4,r4,r4 + adds BSTACK_0,BSTACK_0,BSTACK_0 bne rmark_bit_in_same_word2 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmark_bit_in_same_word2: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmark_not_yet_linked_ab - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r10,r8,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmark_not_yet_linked_ab: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#4+2+1 - str r8,[r6,#4] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str ASTACK_2,[ASTACK_0,#4] + str BSTACK_0,[ASTACK_1] b rmark_hnf_1 rmark_record_3_aab: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_using_reversal_ - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG bne rmark_shared_argument_part - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] subs sp,sp,#8 - str r6,[sp,#4] - add r9,r6,#4 - ldr r6,[r6] - str r6,[sp] + str ASTACK_0,[sp,#4] + add ASTACK_PTR,ASTACK_0,#4 + ldr ASTACK_0,[ASTACK_0] + str ASTACK_0,[sp] - ldr r6,[r7] + ldr ASTACK_0,[ASTACK_1] - cmp r7,r9 + cmp ASTACK_1,ASTACK_PTR bhi rmark_no_reverse_argument_pointer - add r8,r9,#3 - str r6,[r9] - str r8,[r7] + add ASTACK_2,ASTACK_PTR,#3 + str ASTACK_0,[ASTACK_PTR] + str ASTACK_2,[ASTACK_1] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_node - mov r3,r7 + mov BSTACK_1,ASTACK_1 b rmark_node_ rmark_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi rmark_hnf_2 beq rmark_hnf_1 b rmark_next_node rmark_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne rmark_hnf_1 b rmark_next_node @@ -362,339 +361,339 @@ rmark_lazy_node_1: bne rmark_selector_node_1 rmark_hnf_1: - mov r9,r6 - ldr r6,[r6] + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] b rmark_node @ selectors rmark_indirection_node: - subs r6,r6,#4 - sub r7,r6,r11 - - and r8,r7,#31*4 - lsr r7,r7,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r12,[r10,r7,lsl #2] - bic r12,r12,r8 - str r12,[r10,r7,lsl #2] - - mov r7,r6 - cmp r6,r3 - ldr r6,[r6,#4] - str r6,[r9] + subs ASTACK_0,ASTACK_0,#4 + sub ASTACK_1,ASTACK_0,ASTACK_3 + + and ASTACK_2,ASTACK_1,#31*4 + lsr ASTACK_1,ASTACK_1,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + + mov ASTACK_1,ASTACK_0 + cmp ASTACK_0,BSTACK_1 + ldr ASTACK_0,[ASTACK_0,#4] + str ASTACK_0,[ASTACK_PTR] bhi rmark_node_d1 - str r4,[r7] + str BSTACK_0,[ASTACK_1] b rmark_node_d1 rmark_selector_node_1: - cmp r8,#(-2)-1 + cmp ASTACK_2,#(-2)-1 beq rmark_indirection_node - ldr r7,[r6] - mov r1,r3 + ldr ASTACK_1,[ASTACK_0] + mov BSTACK_3,BSTACK_1 - sub r3,r7,r11 - lsr r3,r3,#2 + sub BSTACK_1,ASTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 - cmp r8,#(-3)-1 + cmp ASTACK_2,#(-3)-1 ble rmark_record_selector_node_1 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_hnf_1 - ldrh r12,[r3,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + cmp SCRATCH_REG,#2 bls rmark_small_tuple_or_record rmark_large_tuple_or_record: - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - mov r3,r1 + mov BSTACK_1,BSTACK_3 - cmp r4,#8 + cmp BSTACK_0,#8 blt rmark_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq rmark_tuple_selector_node_2 - add r6,r4,#-12 - ldr r6,[r7,r6] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,17 - otoa r12,e__system__nind,17 - str r12,[r7,#-4] - str r6,[r7] + add ASTACK_0,BSTACK_0,#-12 + ldr ASTACK_0,[ASTACK_1,ASTACK_0] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,17 + otoa SCRATCH_REG,e__system__nind,17 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_tuple_selector_node_2: - ldr r6,[r7] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,18 - otoa r12,e__system__nind,18 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,18 + otoa SCRATCH_REG,e__system__nind,18 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_record_selector_node_1: beq rmark_strict_record_selector_node_1 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_hnf_1 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls rmark_small_tuple_or_record - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 rmark_small_tuple_or_record: - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - mov r3,r1 + mov BSTACK_1,BSTACK_3 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] - subs r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_0,BSTACK_0,#12 rmark_tuple_or_record_selector_node_2: - ldr r6,[r7,r4] - ldr r7,[sp],#4 - str r6,[r9] - lao r12,e__system__nind,19 - otoa r12,e__system__nind,19 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + ldr ASTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_PTR] + lao SCRATCH_REG,e__system__nind,19 + otoa SCRATCH_REG,e__system__nind,19 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmark_node_d1 rmark_strict_record_selector_node_1: - and r8,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmark_hnf_1 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls rmark_select_from_small_record - ldr r3,[r7,#8] - sub r3,r3,r11 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 - and r8,r3,#31*4 - lsr r3,r3,#7 - lsr r8,r8,#2 - mov r12,#1 - lsl r8,r12,r8 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r8 + and ASTACK_2,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_2,ASTACK_2,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_2,SCRATCH_REG,ASTACK_2 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,ASTACK_2 bne rmark_hnf_1 rmark_select_from_small_record: - ldr r3,[r4,#-8] + ldr BSTACK_1,[BSTACK_0,#-8] .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 - cmp r6,r1 + cmp ASTACK_0,BSTACK_3 bhi rmark_selector_pointer_not_reversed .ifdef PIC - ldrh r4,[r3,r12]! + ldrh BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else - ldrh r4,[r3,#4] + ldrh BSTACK_0,[BSTACK_1,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_2 - ldr r12,[r7,#8] - add r4,r4,r12 - ldr r4,[r4,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_0,BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[BSTACK_0,#-12] b rmark_strict_record_selector_node_3 rmark_strict_record_selector_node_2: - ldr r4,[r7,r4] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_3: - str r4,[r6,#4] + str BSTACK_0,[ASTACK_0,#4] .ifdef PIC - ldrh r4,[r3,#6-4] + ldrh BSTACK_0,[BSTACK_1,#6-4] .else - ldrh r4,[r3,#6] + ldrh BSTACK_0,[BSTACK_1,#6] .endif - tst r4,r4 + tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_5 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_4 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_4: - ldr r4,[r7,r4] - str r4,[r6,#8] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] + str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_5: .ifdef PIC - ldr r4,[r3,#-4-4] + ldr BSTACK_0,[BSTACK_1,#-4-4] .else - ldr r4,[r3,#-4] + ldr BSTACK_0,[BSTACK_1,#-4] .endif - add r9,r9,#1 - str r9,[r6] - str r4,[r9,#-1] + add ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[ASTACK_0] + str BSTACK_0,[ASTACK_PTR,#-1] b rmark_next_node rmark_selector_pointer_not_reversed: .ifdef PIC - ldrh r4,[r3,r12]! + ldrh BSTACK_0,[BSTACK_1,SCRATCH_REG]! .else - ldrh r4,[r3,#4] + ldrh BSTACK_0,[BSTACK_1,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_6 - ldr r12,[r7,#8] - add r4,r4,r12 - ldr r4,[r4,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_0,BSTACK_0,SCRATCH_REG + ldr BSTACK_0,[BSTACK_0,#-12] b rmark_strict_record_selector_node_7 rmark_strict_record_selector_node_6: - ldr r4,[r7,r4] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] rmark_strict_record_selector_node_7: - str r4,[r6,#4] + str BSTACK_0,[ASTACK_0,#4] .ifdef PIC - ldrh r4,[r3,#6-4] + ldrh BSTACK_0,[BSTACK_1,#6-4] .else - ldrh r4,[r3,#6] + ldrh BSTACK_0,[BSTACK_1,#6] .endif - tst r4,r4 + tst BSTACK_0,BSTACK_0 beq rmark_strict_record_selector_node_9 - cmp r4,#8 + cmp BSTACK_0,#8 ble rmark_strict_record_selector_node_8 - ldr r7,[r7,#8] - subs r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_0,BSTACK_0,#12 rmark_strict_record_selector_node_8: - ldr r4,[r7,r4] - str r4,[r6,#8] + ldr BSTACK_0,[ASTACK_1,BSTACK_0] + str BSTACK_0,[ASTACK_0,#8] rmark_strict_record_selector_node_9: .ifdef PIC - ldr r4,[r3,#-4-4] + ldr BSTACK_0,[BSTACK_1,#-4-4] .else - ldr r4,[r3,#-4] + ldr BSTACK_0,[BSTACK_1,#-4] .endif - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_reverse_and_mark_next_node: - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - ldr r4,[r6] - str r4,[r9] - add r9,r9,#1 - str r9,[r6] + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_PTR] + add ASTACK_PTR,ASTACK_PTR,#1 + str ASTACK_PTR,[ASTACK_0] @ a2,d1: free rmark_next_node: - ldr r6,[sp] - ldr r9,[sp,#4] + ldr ASTACK_0,[sp] + ldr ASTACK_PTR,[sp,#4] add sp,sp,#8 - cmp r6,#1 + cmp ASTACK_0,#1 bhi rmark_node rmark_next_node_: @@ -702,33 +701,33 @@ end_rmark_nodes: ldr pc,[sp],#4 rmark_lazy_node: - ldr r8,[r4,#-5] - cmp r8,#0 + ldr ASTACK_2,[BSTACK_0,#-5] + cmp ASTACK_2,#0 beq rmark_next_node - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 ble rmark_lazy_node_1 - cmp r8,#255 + cmp ASTACK_2,#255 bge rmark_closure_with_unboxed_arguments rmark_closure_with_unboxed_arguments_: - add r6,r6,r8,lsl #2 + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 rmark_push_lazy_args: - ldr r3,[r6] + ldr BSTACK_1,[ASTACK_0] sub sp,sp,#8 - str r6,[sp,#4] - sub r6,r6,#4 - str r3,[sp] - subs r8,r8,#1 + str ASTACK_0,[sp,#4] + sub ASTACK_0,ASTACK_0,#4 + str BSTACK_1,[sp] + subs ASTACK_2,ASTACK_2,#1 bgt rmark_push_lazy_args - mov r9,r6 - ldr r6,[r6] - cmp sp,r0 + mov ASTACK_PTR,ASTACK_0 + ldr ASTACK_0,[ASTACK_0] + cmp sp,BSTACK_4 bhs rmark_node b rmark_using_reversal @@ -736,247 +735,247 @@ rmark_push_lazy_args: rmark_closure_with_unboxed_arguments: @ (a_size+b_size)+(b_size<<8) @ addl $1,a2 - mov r4,r8 - and r8,r8,#255 - lsr r4,r4,#8 - subs r8,r8,r4 + mov BSTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#255 + lsr BSTACK_0,BSTACK_0,#8 + subs ASTACK_2,ASTACK_2,BSTACK_0 @ subl $1,a2 bgt rmark_closure_with_unboxed_arguments_ beq rmark_hnf_1 b rmark_next_node rmark_hnf_0: - laol r12,INT+2,INT_o_2,11 - otoa r12,INT_o_2,11 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,11 + otoa SCRATCH_REG,INT_o_2,11 + cmp BSTACK_0,SCRATCH_REG beq rmark_int_3 - laol r12,CHAR+2,CHAR_o_2,6 - otoa r12,CHAR_o_2,6 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,6 + otoa SCRATCH_REG,CHAR_o_2,6 + cmp BSTACK_0,SCRATCH_REG beq rmark_char_3 blo rmark_no_normal_hnf_0 - sub r8,r6,r11 + sub ASTACK_2,ASTACK_0,ASTACK_3 - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - add r7,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 - str r7,[r9] - cmp r6,r3 + add ASTACK_1,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 + str ASTACK_1,[ASTACK_PTR] + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_int_3: - ldr r8,[r6,#4] - cmp r8,#33 + ldr ASTACK_2,[ASTACK_0,#4] + cmp ASTACK_2,#33 bcs rmark_next_node - lao r12,small_integers,3 - otoa r12,small_integers,3 - add r7,r12,r8,lsl #3 - str r7,[r9] - sub r8,r6,r11 - - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] - - cmp r6,r3 + lao SCRATCH_REG,small_integers,3 + otoa SCRATCH_REG,small_integers,3 + add ASTACK_1,SCRATCH_REG,ASTACK_2,lsl #3 + str ASTACK_1,[ASTACK_PTR] + sub ASTACK_2,ASTACK_0,ASTACK_3 + + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_char_3: - ldrb r7,[r6,#4] + ldrb ASTACK_1,[ASTACK_0,#4] - lao r12,static_characters,3 - otoa r12,static_characters,3 - add r7,r12,r7,lsl #3 - sub r8,r6,r11 + lao SCRATCH_REG,static_characters,3 + otoa SCRATCH_REG,static_characters,3 + add ASTACK_1,SCRATCH_REG,ASTACK_1,lsl #3 + sub ASTACK_2,ASTACK_0,ASTACK_3 - str r7,[r9] + str ASTACK_1,[ASTACK_PTR] - and r7,r8,#31*4 - lsr r8,r8,#7 - lsr r7,r7,#2 - mov r12,#1 - lsl r7,r12,r7 - ldr r12,[r10,r8,lsl #2] - bic r12,r12,r7 - str r12,[r10,r8,lsl #2] + and ASTACK_1,ASTACK_2,#31*4 + lsr ASTACK_2,ASTACK_2,#7 + lsr ASTACK_1,ASTACK_1,#2 + mov SCRATCH_REG,#1 + lsl ASTACK_1,SCRATCH_REG,ASTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_next_node - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmark_next_node rmark_no_normal_hnf_0: - laol r12,__ARRAY__+2,__ARRAY___o_2,17 - otoa r12,__ARRAY___o_2,17 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,17 + otoa SCRATCH_REG,__ARRAY___o_2,17 + cmp BSTACK_0,SCRATCH_REG bne rmark_next_node - ldr r4,[r6,#8] - tst r4,r4 + ldr BSTACK_0,[ASTACK_0,#8] + tst BSTACK_0,BSTACK_0 beq rmark_lazy_array - ldrh r7,[r4,#-3+2] - tst r7,r7 + ldrh ASTACK_1,[BSTACK_0,#-3+2] + tst ASTACK_1,ASTACK_1 beq rmark_b_array - ldrh r4,[r4,#-3] - tst r4,r4 + ldrh BSTACK_0,[BSTACK_0,#-3] + tst BSTACK_0,BSTACK_0 beq rmark_b_array - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_array_using_reversal - subs r4,r4,#256 - cmp r7,r4 - mov r3,r7 + subs BSTACK_0,BSTACK_0,#256 + cmp ASTACK_1,BSTACK_0 + mov BSTACK_1,ASTACK_1 beq rmark_a_record_array rmark_ab_record_array: - ldr r7,[r6,#4] - add r6,r6,#8 - str r6,[sp,#-4]! + ldr ASTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_0,[sp,#-4]! - mul r7,r4,r7 - lsl r7,r7,#2 + mul ASTACK_1,BSTACK_0,ASTACK_1 + lsl ASTACK_1,ASTACK_1,#2 - subs r4,r4,r3 - add r6,r6,#4 - add r7,r7,r6 + subs BSTACK_0,BSTACK_0,BSTACK_1 + add ASTACK_0,ASTACK_0,#4 + add ASTACK_1,ASTACK_1,ASTACK_0 .align add lr,pc,#9 str lr,[sp,#-4]! bl reorder - ldr r6,[sp],#4 - mov r4,r3 - ldr r12,[r6,#-4] - mul r4,r12,r4 + ldr ASTACK_0,[sp],#4 + mov BSTACK_0,BSTACK_1 + ldr SCRATCH_REG,[ASTACK_0,#-4] + mul BSTACK_0,SCRATCH_REG,BSTACK_0 b rmark_lr_array rmark_b_array: - sub r4,r6,r11 - - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + sub BSTACK_0,ASTACK_0,ASTACK_3 + + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] b rmark_next_node rmark_a_record_array: - ldr r4,[r6,#4] - add r6,r6,#8 - cmp r3,#2 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + cmp BSTACK_1,#2 blo rmark_lr_array - mul r4,r3,r4 + mul BSTACK_0,BSTACK_1,BSTACK_0 b rmark_lr_array rmark_lazy_array: - cmp sp,r0 + cmp sp,BSTACK_4 blo rmark_array_using_reversal - ldr r4,[r6,#4] - add r6,r6,#8 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 rmark_lr_array: - sub r3,r6,r11 - lsr r3,r3,#2 - add r3,r3,r4 - - lsr r7,r3,#5 - and r3,r3,#31 - mov r12,#1 - lsl r3,r12,r3 - ldr r12,[r10,r7,lsl #2] - orr r12,r12,r3 - str r12,[r10,r7,lsl #2] - - cmp r4,#1 + sub BSTACK_1,ASTACK_0,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + add BSTACK_1,BSTACK_1,BSTACK_0 + + lsr ASTACK_1,BSTACK_1,#5 + and BSTACK_1,BSTACK_1,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_1,SCRATCH_REG,BSTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + + cmp BSTACK_0,#1 bls rmark_array_length_0_1 - mov r7,r6 - add r6,r6,r4,lsl #2 - - ldr r4,[r6] - ldr r3,[r7] - str r4,[r7] - str r3,[r6] - - ldr r4,[r6,#-4]! - ldr r3,[r7,#-4]! - str r3,[r6] - str r4,[r7] - str r6,[sp,#-4]! - mov r9,r7 + mov ASTACK_1,ASTACK_0 + add ASTACK_0,ASTACK_0,BSTACK_0,lsl #2 + + ldr BSTACK_0,[ASTACK_0] + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0] + + ldr BSTACK_0,[ASTACK_0,#-4]! + ldr BSTACK_1,[ASTACK_1,#-4]! + str BSTACK_1,[ASTACK_0] + str BSTACK_0,[ASTACK_1] + str ASTACK_0,[sp,#-4]! + mov ASTACK_PTR,ASTACK_1 b rmark_array_nodes rmark_array_nodes1: - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmark_next_array_node - ldr r3,[r6] - add r4,r9,#1 - str r3,[r9] - str r4,[r6] + ldr BSTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#1 + str BSTACK_1,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_next_array_node: - add r9,r9,#4 - ldr r12,[sp] - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + ldr SCRATCH_REG,[sp] + cmp ASTACK_PTR,SCRATCH_REG beq end_rmark_array_node rmark_array_nodes: - ldr r6,[r9] + ldr ASTACK_0,[ASTACK_PTR] - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bcs rmark_next_array_node - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r8,[r10,r3,lsl #2] - tst r8,r4 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,BSTACK_0 bne rmark_array_nodes1 - orr r8,r8,r4 - str r8,[r10,r3,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] - ldr r4,[r6] + ldr BSTACK_0,[ASTACK_0] .align add lr,pc,#9 str lr,[sp,#-4]! bl rmark_array_node - add r9,r9,#4 - ldr r12,[sp] - cmp r9,r12 + add ASTACK_PTR,ASTACK_PTR,#4 + ldr SCRATCH_REG,[sp] + cmp ASTACK_PTR,SCRATCH_REG bne rmark_array_nodes end_rmark_array_node: @@ -985,23 +984,23 @@ end_rmark_array_node: rmark_array_node: sub sp,sp,#8 - str r9,[sp,#4] - mov r3,r9 - mov r12,#1 - str r12,[sp] + str ASTACK_PTR,[sp,#4] + mov BSTACK_1,ASTACK_PTR + mov SCRATCH_REG,#1 + str SCRATCH_REG,[sp] b rmark_arguments rmark_array_length_0_1: - add r6,r6,#-8 + add ASTACK_0,ASTACK_0,#-8 blo rmark_next_node - ldr r3,[r6,#12] - ldr r8,[r6,#8] - str r8,[r6,#12] - ldr r8,[r6,#4] - str r8,[r6,#8] - str r3,[r6,#4] - add r6,r6,#4 + ldr BSTACK_1,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 b rmark_hnf_1 .ifdef PIC diff --git a/thumb2compact_rmarkr.s b/thumb2compact_rmarkr.s index d684e3f..3256ca1 100644 --- a/thumb2compact_rmarkr.s +++ b/thumb2compact_rmarkr.s @@ -1,275 +1,274 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 NO_BIT_INSTRUCTIONS = 1 rmark_using_reversal: - str r9,[sp,#-4]! - str r9,[sp,#-4]! - mov r9,#1 + str ASTACK_PTR,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + mov ASTACK_PTR,#1 b rmarkr_node rmark_using_reversal_: - subs r6,r6,#4 - str r3,[sp,#-4]! - str r9,[sp,#-4]! - cmp r6,r3 + subs ASTACK_0,ASTACK_0,#4 + str BSTACK_1,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + cmp ASTACK_0,BSTACK_1 bhi rmark_no_undo_reverse_1 - str r6,[r9] - str r4,[r6] + str ASTACK_0,[ASTACK_PTR] + str BSTACK_0,[ASTACK_0] rmark_no_undo_reverse_1: - mov r9,#1 + mov ASTACK_PTR,#1 b rmarkr_arguments rmark_array_using_reversal: - str r3,[sp,#-4]! - str r9,[sp,#-4]! - cmp r6,r3 + str BSTACK_1,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! + cmp ASTACK_0,BSTACK_1 bhi rmark_no_undo_reverse_2 - str r6,[r9] - laol r12,__ARRAY__+2,__ARRAY___o_2,18 - otoa r12,__ARRAY___o_2,18 - str r12,[r6] + str ASTACK_0,[ASTACK_PTR] + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,18 + otoa SCRATCH_REG,__ARRAY___o_2,18 + str SCRATCH_REG,[ASTACK_0] rmark_no_undo_reverse_2: - mov r9,#1 + mov ASTACK_PTR,#1 b rmarkr_arguments rmarkr_hnf_2: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - ldr r8,[r6,#4] - str r9,[r6,#4] - add r9,r6,#4 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_PTR,ASTACK_0,#4 + mov ASTACK_0,ASTACK_2 rmarkr_node: - sub r4,r6,r11 - cmp r4,r2 + sub BSTACK_0,ASTACK_0,ASTACK_3 + cmp BSTACK_0,BSTACK_2 bhs rmarkr_next_node_after_static - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r8,[r10,r3,lsl #2] - tst r8,r4 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] + tst ASTACK_2,BSTACK_0 bne rmarkr_next_node - orr r8,r8,r4 - str r8,[r10,r3,lsl #2] + orr ASTACK_2,ASTACK_2,BSTACK_0 + str ASTACK_2,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_arguments: - ldr r4,[r6] - tst r4,#2 + ldr BSTACK_0,[ASTACK_0] + tst BSTACK_0,#2 beq rmarkr_lazy_node - ldrh r8,[r4,#-2] - tst r8,r8 + ldrh ASTACK_2,[BSTACK_0,#-2] + tst ASTACK_2,ASTACK_2 beq rmarkr_hnf_0 - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - cmp r8,#256 + cmp ASTACK_2,#256 bhs rmarkr_record - subs r8,r8,#2 + subs ASTACK_2,ASTACK_2,#2 beq rmarkr_hnf_2 blo rmarkr_hnf_1 rmarkr_hnf_3: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r3,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r3,lsl #2] - tst r4,r12 + lsr BSTACK_1,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + tst BSTACK_0,SCRATCH_REG bne rmarkr_shared_argument_part - orr r12,r12,r4 - str r12,[r10,r3,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] rmarkr_no_shared_argument_part: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - str r9,[r6,#4] - add r6,r6,#4 - - ldr r12,[r7] - orr r12,r12,#1 - str r12,[r7] - add r7,r7,r8,lsl #2 - - ldr r8,[r7] - str r6,[r7] - mov r9,r7 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 + + ldr SCRATCH_REG,[ASTACK_1] + orr SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[ASTACK_1] + add ASTACK_1,ASTACK_1,ASTACK_2,lsl #2 + + ldr ASTACK_2,[ASTACK_1] + str ASTACK_0,[ASTACK_1] + mov ASTACK_PTR,ASTACK_1 + mov ASTACK_0,ASTACK_2 b rmarkr_node rmarkr_shared_argument_part: - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_hnf_1 - ldr r3,[r7] - add r4,r6,#4+2+1 - str r4,[r7] - str r3,[r6,#4] + ldr BSTACK_1,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0,#4] b rmarkr_hnf_1 rmarkr_record: - mov r12,#258/2 - subs r8,r8,r12,lsl #1 + mov SCRATCH_REG,#258/2 + subs ASTACK_2,ASTACK_2,SCRATCH_REG,lsl #1 beq rmarkr_record_2 blo rmarkr_record_1 rmarkr_record_3: - ldrh r8,[r4,#-2+2] - subs r8,r8,#1 + ldrh ASTACK_2,[BSTACK_0,#-2+2] + subs ASTACK_2,ASTACK_2,#1 blo rmarkr_record_3_bb beq rmarkr_record_3_ab - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 beq rmarkr_record_3_aab b rmarkr_hnf_3 rmarkr_record_3_bb: - ldr r7,[r6,#8-4] - subs r6,r6,#4 + ldr ASTACK_1,[ASTACK_0,#8-4] + subs ASTACK_0,ASTACK_0,#4 - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_next_node - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word1 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmarkr_bit_in_same_word1: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmarkr_not_yet_linked_bb - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#2*4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] + add BSTACK_0,BSTACK_0,#2*4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmarkr_not_yet_linked_bb: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#8+2+1 - str r8,[r6,#8] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#8+2+1 + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_0,[ASTACK_1] b rmarkr_next_node rmarkr_record_3_ab: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - cmp r7,r6 + cmp ASTACK_1,ASTACK_0 bhi rmarkr_hnf_1 - add r4,r4,r4 + add BSTACK_0,BSTACK_0,BSTACK_0 bne rmarkr_bit_in_same_word2 - add r8,r8,#1 - mov r4,#1 + add ASTACK_2,ASTACK_2,#1 + mov BSTACK_0,#1 rmarkr_bit_in_same_word2: - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG beq rmarkr_not_yet_linked_ab - sub r4,r6,r11 + sub BSTACK_0,ASTACK_0,ASTACK_3 - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] rmarkr_not_yet_linked_ab: - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] - ldr r8,[r7] - add r4,r6,#4+2+1 - str r8,[r6,#4] - str r4,[r7] + ldr ASTACK_2,[ASTACK_1] + add BSTACK_0,ASTACK_0,#4+2+1 + str ASTACK_2,[ASTACK_0,#4] + str BSTACK_0,[ASTACK_1] b rmarkr_hnf_1 rmarkr_record_3_aab: - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - sub r4,r7,r11 + sub BSTACK_0,ASTACK_1,ASTACK_3 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - tst r4,r12 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + tst BSTACK_0,SCRATCH_REG bne rmarkr_shared_argument_part - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] - - ldr r12,[r6] - add r12,r12,#2 - str r12,[r6] - str r9,[r6,#4] - add r6,r6,#4 - - ldr r9,[r7] - str r6,[r7] - mov r6,r9 - add r9,r7,#1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + + ldr SCRATCH_REG,[ASTACK_0] + add SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 + + ldr ASTACK_PTR,[ASTACK_1] + str ASTACK_0,[ASTACK_1] + mov ASTACK_0,ASTACK_PTR + add ASTACK_PTR,ASTACK_1,#1 b rmarkr_node rmarkr_record_2: - ldrh r12,[r4,#-2+2] - cmp r12,#1 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#1 bhi rmarkr_hnf_2 beq rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_record_1: - ldrh r12,[r4,#-2+2] - cmp r12,#0 + ldrh SCRATCH_REG,[BSTACK_0,#-2+2] + cmp SCRATCH_REG,#0 bne rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_lazy_node_1: @@ -277,757 +276,757 @@ rmarkr_lazy_node_1: bne rmarkr_selector_node_1 rmarkr_hnf_1: - ldr r8,[r6] - str r9,[r6] + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] - add r9,r6,#2 - mov r6,r8 + add ASTACK_PTR,ASTACK_0,#2 + mov ASTACK_0,ASTACK_2 b rmarkr_node @ selectors rmarkr_indirection_node: - add r12,r6,#-4 - sub r3,r12,r11 - - and r4,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r4,#2 - mov r4,#1 - lsl r4,r4,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r4 - str r12,[r10,r3,lsl #2] - - ldr r6,[r6] + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 + + and BSTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,BSTACK_0,#2 + mov BSTACK_0,#1 + lsl BSTACK_0,BSTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + + ldr ASTACK_0,[ASTACK_0] b rmarkr_node rmarkr_selector_node_1: - cmp r8,#(-2)-1 + cmp ASTACK_2,#(-2)-1 beq rmarkr_indirection_node - ldr r7,[r6] + ldr ASTACK_1,[ASTACK_0] - sub r3,r7,r11 - lsr r3,r3,#2 + sub BSTACK_1,ASTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 - cmp r8,#(-3)-1 + cmp ASTACK_2,#(-3)-1 ble rmarkr_record_selector_node_1 - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - ldrh r12,[r3,#-2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + cmp SCRATCH_REG,#2 bls rmarkr_small_tuple_or_record rmarkr_large_tuple_or_record: - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 blt rmarkr_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] + ldr ASTACK_1,[ASTACK_1,#8] beq rmarkr_tuple_selector_node_2 - add r12,r4,#-12 - ldr r6,[r7,r12] - ldr r7,[sp],#4 - lao r12,e__system__nind,20 - otoa r12,e__system__nind,20 - str r12,[r7,#-4] - str r6,[r7] + add SCRATCH_REG,BSTACK_0,#-12 + ldr ASTACK_0,[ASTACK_1,SCRATCH_REG] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,20 + otoa SCRATCH_REG,e__system__nind,20 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_tuple_selector_node_2: - ldr r6,[r7] - ldr r7,[sp],#4 - lao r12,e__system__nind,21 - otoa r12,e__system__nind,21 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,21 + otoa SCRATCH_REG,e__system__nind,21 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_record_selector_node_1: beq rmarkr_strict_record_selector_node_1 - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls rmarkr_small_tuple_or_record - ldr r3,[r7,#8] - sub r3,r3,r11 - lsr r3,r3,#2 - - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 rmarkr_small_tuple_or_record: - add r12,r6,#-4 - sub r3,r12,r11 + add SCRATCH_REG,ASTACK_0,#-4 + sub BSTACK_1,SCRATCH_REG,ASTACK_3 - str r6,[sp,#-4]! + str ASTACK_0,[sp,#-4]! .ifdef PIC - add r12,r4,#-8+4 + add SCRATCH_REG,BSTACK_0,#-8+4 .endif - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r6,r6,#2 + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr ASTACK_0,ASTACK_0,#2 .ifdef PIC - ldrh r4,[r12,r4] + ldrh BSTACK_0,[SCRATCH_REG,BSTACK_0] .endif - mov r12,#1 - lsl r6,r12,r6 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + mov SCRATCH_REG,#1 + lsl ASTACK_0,SCRATCH_REG,ASTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] .ifndef PIC - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble rmarkr_tuple_or_record_selector_node_2 - ldr r7,[r7,#8] - sub r4,r4,#12 + ldr ASTACK_1,[ASTACK_1,#8] + sub BSTACK_0,BSTACK_0,#12 rmarkr_tuple_or_record_selector_node_2: - ldr r6,[r7,r4] - ldr r7,[sp],#4 - lao r12,e__system__nind,22 - otoa r12,e__system__nind,22 - str r12,[r7,#-4] - str r6,[r7] + ldr ASTACK_0,[ASTACK_1,BSTACK_0] + ldr ASTACK_1,[sp],#4 + lao SCRATCH_REG,e__system__nind,22 + otoa SCRATCH_REG,e__system__nind,22 + str SCRATCH_REG,[ASTACK_1,#-4] + str ASTACK_0,[ASTACK_1] b rmarkr_node rmarkr_strict_record_selector_node_1: - str r4,[sp,#-4]! - and r4,r3,#31 - lsr r3,r3,#5 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31 + lsr BSTACK_1,BSTACK_1,#5 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 - ldr r3,[r7] - tst r3,#2 + ldr BSTACK_1,[ASTACK_1] + tst BSTACK_1,#2 beq rmarkr_hnf_1 - ldrh r12,[r3,#-2] - mov r3,#258/2 - cmp r12,r3,lsl #1 + ldrh SCRATCH_REG,[BSTACK_1,#-2] + mov BSTACK_1,#258/2 + cmp SCRATCH_REG,BSTACK_1,lsl #1 bls rmarkr_select_from_small_record - ldr r3,[r7,#8] - sub r3,r3,r11 - - str r4,[sp,#-4]! - and r4,r3,#31*4 - lsr r3,r3,#7 - lsr r4,r4,#2 - mov r12,#1 - lsl r4,r12,r4 - ldr r3,[r10,r3,lsl #2] - and r3,r3,r4 - ldr r4,[sp],#4 + ldr BSTACK_1,[ASTACK_1,#8] + sub BSTACK_1,BSTACK_1,ASTACK_3 + + str BSTACK_0,[sp,#-4]! + and BSTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr BSTACK_0,BSTACK_0,#2 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr BSTACK_1,[HEAP_PTR,BSTACK_1,lsl #2] + and BSTACK_1,BSTACK_1,BSTACK_0 + ldr BSTACK_0,[sp],#4 bne rmarkr_hnf_1 rmarkr_select_from_small_record: .ifdef PIC - ldr r12,[r4,#-8] - add r4,r4,#-8+4 + ldr SCRATCH_REG,[BSTACK_0,#-8] + add BSTACK_0,BSTACK_0,#-8+4 .else - ldr r4,[r4,#-8] + ldr BSTACK_0,[BSTACK_0,#-8] .endif - sub r6,r6,#4 + sub ASTACK_0,ASTACK_0,#4 .ifdef PIC - ldrh r3,[r4,r12]! + ldrh BSTACK_1,[BSTACK_0,SCRATCH_REG]! .else - ldrh r3,[r4,#4] + ldrh BSTACK_1,[BSTACK_0,#4] .endif - cmp r3,#8 + cmp BSTACK_1,#8 ble rmarkr_strict_record_selector_node_2 - ldr r12,[r7,#8] - add r3,r3,r12 - ldr r3,[r3,#-12] + ldr SCRATCH_REG,[ASTACK_1,#8] + add BSTACK_1,BSTACK_1,SCRATCH_REG + ldr BSTACK_1,[BSTACK_1,#-12] b rmarkr_strict_record_selector_node_3 rmarkr_strict_record_selector_node_2: - ldr r3,[r7,r3] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] rmarkr_strict_record_selector_node_3: - str r3,[r6,#4] + str BSTACK_1,[ASTACK_0,#4] .ifdef PIC - ldrh r3,[r4,#6-4] + ldrh BSTACK_1,[BSTACK_0,#6-4] .else - ldrh r3,[r4,#6] + ldrh BSTACK_1,[BSTACK_0,#6] .endif - tst r3,r3 + tst BSTACK_1,BSTACK_1 beq rmarkr_strict_record_selector_node_5 - cmp r3,#8 + cmp BSTACK_1,#8 ble rmarkr_strict_record_selector_node_4 - ldr r7,[r7,#8] - subs r3,r3,#12 + ldr ASTACK_1,[ASTACK_1,#8] + subs BSTACK_1,BSTACK_1,#12 rmarkr_strict_record_selector_node_4: - ldr r3,[r7,r3] - str r3,[r6,#8] + ldr BSTACK_1,[ASTACK_1,BSTACK_1] + str BSTACK_1,[ASTACK_0,#8] rmarkr_strict_record_selector_node_5: .ifdef PIC - ldr r4,[r4,#-4-4] + ldr BSTACK_0,[BSTACK_0,#-4-4] .else - ldr r4,[r4,#-4] + ldr BSTACK_0,[BSTACK_0,#-4] .endif - str r4,[r6] + str BSTACK_0,[ASTACK_0] b rmarkr_next_node @ a2,d1: free rmarkr_next_node: - tst r9,#3 + tst ASTACK_PTR,#3 bne rmarkr_parent - ldr r8,[r9,#-4] - mov r3,#3 + ldr ASTACK_2,[ASTACK_PTR,#-4] + mov BSTACK_1,#3 - and r3,r3,r8 - subs r9,r9,#4 + and BSTACK_1,BSTACK_1,ASTACK_2 + subs ASTACK_PTR,ASTACK_PTR,#4 - cmp r3,#3 + cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle1 - ldr r7,[r9,#4] - str r7,[r9] + ldr ASTACK_1,[ASTACK_PTR,#4] + str ASTACK_1,[ASTACK_PTR] rmarkr_c_argument_part_cycle1: - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_1 - ldr r7,[r6] - add r4,r9,#4+1 - str r7,[r9,#4] - str r4,[r6] + ldr ASTACK_1,[ASTACK_0] + add BSTACK_0,ASTACK_PTR,#4+1 + str ASTACK_1,[ASTACK_PTR,#4] + str BSTACK_0,[ASTACK_0] - orr r9,r9,r3 - mov r6,r8 - eor r6,r6,r3 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + mov ASTACK_0,ASTACK_2 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_no_reverse_1: - str r6,[r9,#4] - mov r6,r8 - orr r9,r9,r3 - eor r6,r6,r3 + str ASTACK_0,[ASTACK_PTR,#4] + mov ASTACK_0,ASTACK_2 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_lazy_node: - ldr r8,[r4,#-4] - tst r8,r8 + ldr ASTACK_2,[BSTACK_0,#-4] + tst ASTACK_2,ASTACK_2 beq rmarkr_next_node - add r6,r6,#4 + add ASTACK_0,ASTACK_0,#4 - subs r8,r8,#1 + subs ASTACK_2,ASTACK_2,#1 ble rmarkr_lazy_node_1 - cmp r8,#255 + cmp ASTACK_2,#255 bge rmarkr_closure_with_unboxed_arguments rmarkr_closure_with_unboxed_arguments_: - ldr r12,[r6] - orr r12,r12,#2 - str r12,[r6] - add r6,r6,r8,lsl #2 - - ldr r8,[r6] - str r9,[r6] - mov r9,r6 - mov r6,r8 + ldr SCRATCH_REG,[ASTACK_0] + orr SCRATCH_REG,SCRATCH_REG,#2 + str SCRATCH_REG,[ASTACK_0] + add ASTACK_0,ASTACK_0,ASTACK_2,lsl #2 + + ldr ASTACK_2,[ASTACK_0] + str ASTACK_PTR,[ASTACK_0] + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_2 b rmarkr_node rmarkr_closure_with_unboxed_arguments: @ (a_size+b_size)+(b_size<<8) @ addl $1,a2 - mov r4,r8 - and r8,r8,#255 - lsr r4,r4,#8 - subs r8,r8,r4 + mov BSTACK_0,ASTACK_2 + and ASTACK_2,ASTACK_2,#255 + lsr BSTACK_0,BSTACK_0,#8 + subs ASTACK_2,ASTACK_2,BSTACK_0 @ subl $1,a2 bgt rmarkr_closure_with_unboxed_arguments_ beq rmarkr_hnf_1 - subs r6,r6,#4 + subs ASTACK_0,ASTACK_0,#4 b rmarkr_next_node rmarkr_hnf_0: - laol r12,INT+2,INT_o_2,12 - otoa r12,INT_o_2,12 - cmp r4,r12 + laol SCRATCH_REG,INT+2,INT_o_2,12 + otoa SCRATCH_REG,INT_o_2,12 + cmp BSTACK_0,SCRATCH_REG beq rmarkr_int_3 - laol r12,CHAR+2,CHAR_o_2,7 - otoa r12,CHAR_o_2,7 - cmp r4,r12 + laol SCRATCH_REG,CHAR+2,CHAR_o_2,7 + otoa SCRATCH_REG,CHAR_o_2,7 + cmp BSTACK_0,SCRATCH_REG beq rmarkr_char_3 blo rmarkr_no_normal_hnf_0 - sub r3,r6,r11 + sub BSTACK_1,ASTACK_0,ASTACK_3 - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r6,#2 - mov r6,#1 - lsl r6,r6,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_0,#2 + mov ASTACK_0,#1 + lsl ASTACK_0,ASTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - add r6,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 + add ASTACK_0,BSTACK_0,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 b rmarkr_next_node_after_static rmarkr_int_3: - ldr r8,[r6,#4] - cmp r8,#33 + ldr ASTACK_2,[ASTACK_0,#4] + cmp ASTACK_2,#33 bhs rmarkr_next_node - sub r3,r6,r11 + sub BSTACK_1,ASTACK_0,ASTACK_3 - and r6,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r6,#2 - mov r6,#1 - lsl r6,r6,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r6 - str r12,[r10,r3,lsl #2] + and ASTACK_0,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_0,#2 + mov ASTACK_0,#1 + lsl ASTACK_0,ASTACK_0,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_0 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] - lao r12,small_integers,4 - otoa r12,small_integers,4 - add r6,r12,r8,lsl #3 + lao SCRATCH_REG,small_integers,4 + otoa SCRATCH_REG,small_integers,4 + add ASTACK_0,SCRATCH_REG,ASTACK_2,lsl #3 b rmarkr_next_node_after_static rmarkr_char_3: - ldrb r4,[r6,#4] - sub r3,r6,r11 - - and r8,r3,#31*4 - lsr r3,r3,#7 - lsr r12,r8,#2 - mov r8,#1 - lsl r8,r8,r12 - ldr r12,[r10,r3,lsl #2] - bic r12,r12,r8 - str r12,[r10,r3,lsl #2] - - lao r12,static_characters,4 - otoa r12,static_characters,4 - add r6,r12,r4,lsl #3 + ldrb BSTACK_0,[ASTACK_0,#4] + sub BSTACK_1,ASTACK_0,ASTACK_3 + + and ASTACK_2,BSTACK_1,#31*4 + lsr BSTACK_1,BSTACK_1,#7 + lsr SCRATCH_REG,ASTACK_2,#2 + mov ASTACK_2,#1 + lsl ASTACK_2,ASTACK_2,SCRATCH_REG + ldr SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + bic SCRATCH_REG,SCRATCH_REG,ASTACK_2 + str SCRATCH_REG,[HEAP_PTR,BSTACK_1,lsl #2] + + lao SCRATCH_REG,static_characters,4 + otoa SCRATCH_REG,static_characters,4 + add ASTACK_0,SCRATCH_REG,BSTACK_0,lsl #3 b rmarkr_next_node_after_static rmarkr_no_normal_hnf_0: - laol r12,__ARRAY__+2,__ARRAY___o_2,19 - otoa r12,__ARRAY___o_2,19 - cmp r4,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,19 + otoa SCRATCH_REG,__ARRAY___o_2,19 + cmp BSTACK_0,SCRATCH_REG bne rmarkr_next_node - ldr r4,[r6,#8] - cmp r4,#0 + ldr BSTACK_0,[ASTACK_0,#8] + cmp BSTACK_0,#0 beq rmarkr_lazy_array - ldrh r3,[r4,#-2+2] - cmp r3,#0 + ldrh BSTACK_1,[BSTACK_0,#-2+2] + cmp BSTACK_1,#0 beq rmarkr_b_array - ldrh r4,[r4,#-2] - cmp r4,#0 + ldrh BSTACK_0,[BSTACK_0,#-2] + cmp BSTACK_0,#0 beq rmarkr_b_array - subs r4,r4,#256 - cmp r3,r4 + subs BSTACK_0,BSTACK_0,#256 + cmp BSTACK_1,BSTACK_0 beq rmarkr_a_record_array rmarkr_ab_record_array: - ldr r7,[r6,#4] - add r6,r6,#8 - str r6,[sp,#-4]! + ldr ASTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + str ASTACK_0,[sp,#-4]! - mul r7,r4,r7 - lsl r7,r7,#2 + mul ASTACK_1,BSTACK_0,ASTACK_1 + lsl ASTACK_1,ASTACK_1,#2 - subs r4,r4,r3 - add r6,r6,#4 - add r7,r7,r6 + subs BSTACK_0,BSTACK_0,BSTACK_1 + add ASTACK_0,ASTACK_0,#4 + add ASTACK_1,ASTACK_1,ASTACK_0 .align add lr,pc,#9 str lr,[sp,#-4]! bl reorder - ldr r6,[sp],#4 - mov r4,r3 - ldr r12,[r6,#-4] - mul r4,r12,r4 + ldr ASTACK_0,[sp],#4 + mov BSTACK_0,BSTACK_1 + ldr SCRATCH_REG,[ASTACK_0,#-4] + mul BSTACK_0,SCRATCH_REG,BSTACK_0 b rmarkr_lr_array rmarkr_b_array: - sub r4,r6,r11 - - add r4,r4,#4 - lsr r8,r4,#7 - lsr r4,r4,#2 - and r4,r4,#31 - mov r12,#1 - lsl r4,r12,r4 - ldr r12,[r10,r8,lsl #2] - orr r12,r12,r4 - str r12,[r10,r8,lsl #2] + sub BSTACK_0,ASTACK_0,ASTACK_3 + + add BSTACK_0,BSTACK_0,#4 + lsr ASTACK_2,BSTACK_0,#7 + lsr BSTACK_0,BSTACK_0,#2 + and BSTACK_0,BSTACK_0,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[HEAP_PTR,ASTACK_2,lsl #2] b rmarkr_next_node rmarkr_a_record_array: - ldr r4,[r6,#4] - add r6,r6,#8 - cmp r3,#2 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 + cmp BSTACK_1,#2 blo rmarkr_lr_array - mul r4,r3,r4 + mul BSTACK_0,BSTACK_1,BSTACK_0 b rmarkr_lr_array rmarkr_lazy_array: - ldr r4,[r6,#4] - add r6,r6,#8 + ldr BSTACK_0,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#8 rmarkr_lr_array: - sub r3,r6,r11 - lsr r3,r3,#2 - add r3,r3,r4 - - lsr r7,r3,#5 - and r3,r3,#31 - mov r12,#1 - lsl r3,r12,r3 - ldr r12,[r10,r7,lsl #2] - orr r12,r12,r3 - str r12,[r10,r7,lsl #2] - - cmp r4,#1 + sub BSTACK_1,ASTACK_0,ASTACK_3 + lsr BSTACK_1,BSTACK_1,#2 + add BSTACK_1,BSTACK_1,BSTACK_0 + + lsr ASTACK_1,BSTACK_1,#5 + and BSTACK_1,BSTACK_1,#31 + mov SCRATCH_REG,#1 + lsl BSTACK_1,SCRATCH_REG,BSTACK_1 + ldr SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + orr SCRATCH_REG,SCRATCH_REG,BSTACK_1 + str SCRATCH_REG,[HEAP_PTR,ASTACK_1,lsl #2] + + cmp BSTACK_0,#1 bls rmarkr_array_length_0_1 - mov r7,r6 - add r6,r6,r4,lsl #2 - - ldr r4,[r6] - ldr r3,[r7] - str r4,[r7] - str r3,[r6] - - ldr r4,[r6,#-4] - subs r6,r6,#4 - add r4,r4,#2 - ldr r3,[r7,#-4] - subs r7,r7,#4 - str r3,[r6] - str r4,[r7] - - ldr r4,[r6,#-4] - subs r6,r6,#4 - str r9,[r6] - mov r9,r6 - mov r6,r4 + mov ASTACK_1,ASTACK_0 + add ASTACK_0,ASTACK_0,BSTACK_0,lsl #2 + + ldr BSTACK_0,[ASTACK_0] + ldr BSTACK_1,[ASTACK_1] + str BSTACK_0,[ASTACK_1] + str BSTACK_1,[ASTACK_0] + + ldr BSTACK_0,[ASTACK_0,#-4] + subs ASTACK_0,ASTACK_0,#4 + add BSTACK_0,BSTACK_0,#2 + ldr BSTACK_1,[ASTACK_1,#-4] + subs ASTACK_1,ASTACK_1,#4 + str BSTACK_1,[ASTACK_0] + str BSTACK_0,[ASTACK_1] + + ldr BSTACK_0,[ASTACK_0,#-4] + subs ASTACK_0,ASTACK_0,#4 + str ASTACK_PTR,[ASTACK_0] + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,BSTACK_0 b rmarkr_node rmarkr_array_length_0_1: - add r6,r6,#-8 + add ASTACK_0,ASTACK_0,#-8 blo rmarkr_next_node - ldr r3,[r6,#12] - ldr r8,[r6,#8] - str r8,[r6,#12] - ldr r8,[r6,#4] - str r8,[r6,#8] - str r3,[r6,#4] - add r6,r6,#4 + ldr BSTACK_1,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_0,#12] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_0,#8] + str BSTACK_1,[ASTACK_0,#4] + add ASTACK_0,ASTACK_0,#4 b rmarkr_hnf_1 @ a2: free rmarkr_parent: - and r3,r9,#3 + and BSTACK_1,ASTACK_PTR,#3 - bics r9,r9,#3 + bics ASTACK_PTR,ASTACK_PTR,#3 beq end_rmarkr - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - cmp r6,r9 + cmp ASTACK_0,ASTACK_PTR bhi rmarkr_no_reverse_2 - mov r7,r6 - add r4,r9,#1 - ldr r6,[r7] - str r4,[r7] + mov ASTACK_1,ASTACK_0 + add BSTACK_0,ASTACK_PTR,#1 + ldr ASTACK_0,[ASTACK_1] + str BSTACK_0,[ASTACK_1] rmarkr_no_reverse_2: - str r6,[r9] - add r6,r9,#-4 - mov r9,r8 + str ASTACK_0,[ASTACK_PTR] + add ASTACK_0,ASTACK_PTR,#-4 + mov ASTACK_PTR,ASTACK_2 b rmarkr_next_node rmarkr_argument_part_parent: - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - mov r7,r9 - mov r9,r6 - mov r6,r7 + mov ASTACK_1,ASTACK_PTR + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_1 rmarkr_skip_upward_pointers: - mov r4,r8 - and r4,r4,#3 - cmp r4,#3 + mov BSTACK_0,ASTACK_2 + and BSTACK_0,BSTACK_0,#3 + cmp BSTACK_0,#3 bne rmarkr_no_upward_pointer - add r7,r8,#-3 - ldr r8,[r8,#-3] + add ASTACK_1,ASTACK_2,#-3 + ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers rmarkr_no_upward_pointer: - cmp r9,r6 + cmp ASTACK_PTR,ASTACK_0 bhi rmarkr_no_reverse_3 - mov r3,r9 - ldr r9,[r9] - add r4,r6,#1 - str r4,[r3] + mov BSTACK_1,ASTACK_PTR + ldr ASTACK_PTR,[ASTACK_PTR] + add BSTACK_0,ASTACK_0,#1 + str BSTACK_0,[BSTACK_1] rmarkr_no_reverse_3: - str r9,[r7] - add r9,r8,#-4 + str ASTACK_PTR,[ASTACK_1] + add ASTACK_PTR,ASTACK_2,#-4 - and r9,r9,#-4 + and ASTACK_PTR,ASTACK_PTR,#-4 - mov r7,r9 - mov r3,#3 + mov ASTACK_1,ASTACK_PTR + mov BSTACK_1,#3 - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - and r3,r3,r8 - ldr r4,[r7,#4] + and BSTACK_1,BSTACK_1,ASTACK_2 + ldr BSTACK_0,[ASTACK_1,#4] - orr r9,r9,r3 - str r4,[r7] + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + str BSTACK_0,[ASTACK_1] - cmp r6,r7 + cmp ASTACK_0,ASTACK_1 bhi rmarkr_no_reverse_4 - ldr r4,[r6] - str r4,[r7,#4] - add r4,r7,#4+2+1 - str r4,[r6] - mov r6,r8 - and r6,r6,#-4 + ldr BSTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_1,#4] + add BSTACK_0,ASTACK_1,#4+2+1 + str BSTACK_0,[ASTACK_0] + mov ASTACK_0,ASTACK_2 + and ASTACK_0,ASTACK_0,#-4 b rmarkr_node rmarkr_no_reverse_4: - str r6,[r7,#4] - mov r6,r8 - and r6,r6,#-4 + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_0,ASTACK_2 + and ASTACK_0,ASTACK_0,#-4 b rmarkr_node rmarkr_argument_part_cycle1: - ldr r4,[r9,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_PTR,#4] + str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list1: - mov r7,r8 - and r7,r7,#-4 - ldr r8,[r7] - mov r3,#3 - and r3,r3,r8 - cmp r3,#3 + mov ASTACK_1,ASTACK_2 + and ASTACK_1,ASTACK_1,#-4 + ldr ASTACK_2,[ASTACK_1] + mov BSTACK_1,#3 + and BSTACK_1,BSTACK_1,ASTACK_2 + cmp BSTACK_1,#3 beq rmarkr_skip_pointer_list1 - str r4,[r7] - ldr r7,[sp],#4 + str BSTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle1 rmarkr_next_node_after_static: - tst r9,#3 + tst ASTACK_PTR,#3 bne rmarkr_parent_after_static - ldr r8,[r9,#-4] - mov r3,#3 + ldr ASTACK_2,[ASTACK_PTR,#-4] + mov BSTACK_1,#3 - and r3,r3,r8 - subs r9,r9,#4 + and BSTACK_1,BSTACK_1,ASTACK_2 + subs ASTACK_PTR,ASTACK_PTR,#4 - cmp r3,#3 + cmp BSTACK_1,#3 beq rmarkr_argument_part_cycle2 - ldr r4,[r9,#4] - str r4,[r9] + ldr BSTACK_0,[ASTACK_PTR,#4] + str BSTACK_0,[ASTACK_PTR] rmarkr_c_argument_part_cycle2: - str r6,[r9,#4] - mov r6,r8 - orr r9,r9,r3 - eor r6,r6,r3 + str ASTACK_0,[ASTACK_PTR,#4] + mov ASTACK_0,ASTACK_2 + orr ASTACK_PTR,ASTACK_PTR,BSTACK_1 + eor ASTACK_0,ASTACK_0,BSTACK_1 b rmarkr_node rmarkr_parent_after_static: - and r3,r9,#3 + and BSTACK_1,ASTACK_PTR,#3 - ands r9,r9,#-4 + ands ASTACK_PTR,ASTACK_PTR,#-4 beq end_rmarkr_after_static - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 beq rmarkr_argument_part_parent_after_static - ldr r8,[r9] - str r6,[r9] - add r6,r9,#-4 - mov r9,r8 + ldr ASTACK_2,[ASTACK_PTR] + str ASTACK_0,[ASTACK_PTR] + add ASTACK_0,ASTACK_PTR,#-4 + mov ASTACK_PTR,ASTACK_2 b rmarkr_next_node rmarkr_argument_part_parent_after_static: - ldr r8,[r9] + ldr ASTACK_2,[ASTACK_PTR] - mov r7,r9 - mov r9,r6 - mov r6,r7 + mov ASTACK_1,ASTACK_PTR + mov ASTACK_PTR,ASTACK_0 + mov ASTACK_0,ASTACK_1 @ movl (a1),a2 rmarkr_skip_upward_pointers_2: - mov r4,r8 - and r4,r4,#3 - cmp r4,#3 + mov BSTACK_0,ASTACK_2 + and BSTACK_0,BSTACK_0,#3 + cmp BSTACK_0,#3 bne rmarkr_no_reverse_3 @ movl a2,a1 @ andl $-4,a1 @ movl (a1),a2 - add r7,r8,#-3 - ldr r8,[r8,#-3] + add ASTACK_1,ASTACK_2,#-3 + ldr ASTACK_2,[ASTACK_2,#-3] b rmarkr_skip_upward_pointers_2 rmarkr_argument_part_cycle2: - ldr r4,[r9,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_PTR,#4] + str ASTACK_1,[sp,#-4]! rmarkr_skip_pointer_list2: - mov r7,r8 - and r7,r7,#-4 - ldr r8,[r7] - mov r3,#3 - and r3,r3,r8 - cmp r3,#3 + mov ASTACK_1,ASTACK_2 + and ASTACK_1,ASTACK_1,#-4 + ldr ASTACK_2,[ASTACK_1] + mov BSTACK_1,#3 + and BSTACK_1,BSTACK_1,ASTACK_2 + cmp BSTACK_1,#3 beq rmarkr_skip_pointer_list2 - str r4,[r7] - ldr r7,[sp],#4 + str BSTACK_0,[ASTACK_1] + ldr ASTACK_1,[sp],#4 b rmarkr_c_argument_part_cycle2 end_rmarkr_after_static: - ldr r9,[sp] + ldr ASTACK_PTR,[sp] add sp,sp,#8 - str r6,[r9] + str ASTACK_0,[ASTACK_PTR] b rmarkr_next_stack_node end_rmarkr: - ldr r9,[sp],#4 - ldr r3,[sp],#4 + ldr ASTACK_PTR,[sp],#4 + ldr BSTACK_1,[sp],#4 - cmp r6,r3 + cmp ASTACK_0,BSTACK_1 bhi rmark_no_reverse_4 - mov r7,r6 - add r4,r9,#1 - ldr r6,[r6] - str r4,[r7] + mov ASTACK_1,ASTACK_0 + add BSTACK_0,ASTACK_PTR,#1 + ldr ASTACK_0,[ASTACK_0] + str BSTACK_0,[ASTACK_1] rmark_no_reverse_4: - str r6,[r9] + str ASTACK_0,[ASTACK_PTR] rmarkr_next_stack_node: - cmp sp,r0 + cmp sp,BSTACK_4 bhs rmark_next_node - ldr r6,[sp] - ldr r9,[sp,#4] + ldr ASTACK_0,[sp] + ldr ASTACK_PTR,[sp,#4] add sp,sp,#8 - cmp r6,#1 + cmp ASTACK_0,#1 bhi rmark_using_reversal b rmark_next_node_ diff --git a/thumb2copy.s b/thumb2copy.s index 1a917df..604107f 100644 --- a/thumb2copy.s +++ b/thumb2copy.s @@ -1,107 +1,106 @@ - ZERO_ARITY_DESCRIPTOR_OFFSET = -4 COPY_RECORDS_WITHOUT_POINTERS_TO_END_OF_HEAP = 1 - str r9,[sp,#-4]! + str ASTACK_PTR,[sp,#-4]! - lao r12,heap_p2,9 - ldo r10,r12,heap_p2,9 + lao SCRATCH_REG,heap_p2,9 + ldo HEAP_PTR,SCRATCH_REG,heap_p2,9 - lao r12,heap_size_129,4 - ldo r4,r12,heap_size_129,4 - lsl r4,r4,#6 + lao SCRATCH_REG,heap_size_129,4 + ldo BSTACK_0,SCRATCH_REG,heap_size_129,4 + lsl BSTACK_0,BSTACK_0,#6 - lao r12,semi_space_size,0 - sto r4,r12,semi_space_size,0 + lao SCRATCH_REG,semi_space_size,0 + sto BSTACK_0,SCRATCH_REG,semi_space_size,0 - add r9,r10,r4 + add ASTACK_PTR,HEAP_PTR,BSTACK_0 -@ r0 = INT+2 -@ r1 = CHAR+2 - laol r0,INT+2,INT_o_2,6 - laol r1,CHAR+2,CHAR_o_2,2 - otoa r0,INT_o_2,6 - otoa r1,CHAR_o_2,2 +@ BSTACK_4 = INT+2 +@ BSTACK_3 = CHAR+2 + laol BSTACK_4,INT+2,INT_o_2,6 + laol BSTACK_3,CHAR+2,CHAR_o_2,2 + otoa BSTACK_4,INT_o_2,6 + otoa BSTACK_3,CHAR_o_2,2 .if WRITE_HEAP - laol r12,heap2_begin_and_end+4,heap2_begin_and_end_o_4,0 - sto r9,r12,heap2_begin_and_end_o_4,0 + laol SCRATCH_REG,heap2_begin_and_end+4,heap2_begin_and_end_o_4,0 + sto ASTACK_PTR,SCRATCH_REG,heap2_begin_and_end_o_4,0 .endif sub sp,sp,#16 - lao r12,caf_list,0 - ldo r4,r12,caf_list,0 - tst r4,r4 + lao SCRATCH_REG,caf_list,0 + ldo BSTACK_0,SCRATCH_REG,caf_list,0 + tst BSTACK_0,BSTACK_0 beq end_copy_cafs copy_cafs_lp: - ldr r12,[r4,#-4] - str r12,[sp,#-4]! + ldr SCRATCH_REG,[BSTACK_0,#-4] + str SCRATCH_REG,[sp,#-4]! - add r8,r4,#4 - ldr r3,[r4] - mov r2,#-2 + add ASTACK_2,BSTACK_0,#4 + ldr BSTACK_1,[BSTACK_0] + mov BSTACK_2,#-2 bl copy_lp2 - ldr r4,[sp],#4 - cmp r4,#0 + ldr BSTACK_0,[sp],#4 + cmp BSTACK_0,#0 bne copy_cafs_lp end_copy_cafs: - ldr r3,[sp,#16] - lao r12,stack_p,4 - ldo r8,r12,stack_p,4 - sub r3,r3,r8 - lsr r3,r3,#2 + ldr BSTACK_1,[sp,#16] + lao SCRATCH_REG,stack_p,4 + ldo ASTACK_2,SCRATCH_REG,stack_p,4 + sub BSTACK_1,BSTACK_1,ASTACK_2 + lsr BSTACK_1,BSTACK_1,#2 - cmp r3,#0 + cmp BSTACK_1,#0 beq end_copy0 - mov r2,#-2 + mov BSTACK_2,#-2 bl copy_lp2 end_copy0: - lao r12,heap_p2,10 - ldo r8,r12,heap_p2,10 + lao SCRATCH_REG,heap_p2,10 + ldo ASTACK_2,SCRATCH_REG,heap_p2,10 bl copy_lp1 add sp,sp,#16 - lao r12,heap_end_after_gc,10 - sto r9,r12,heap_end_after_gc,10 + lao SCRATCH_REG,heap_end_after_gc,10 + sto ASTACK_PTR,SCRATCH_REG,heap_end_after_gc,10 .ifdef FINALIZERS - lao r6,finalizer_list,1 - lao r7,free_finalizer_list,3 - otoa r6,finalizer_list,1 - otoa r7,free_finalizer_list,3 - ldr r8,[r6] + lao ASTACK_0,finalizer_list,1 + lao ASTACK_1,free_finalizer_list,3 + otoa ASTACK_0,finalizer_list,1 + otoa ASTACK_1,free_finalizer_list,3 + ldr ASTACK_2,[ASTACK_0] determine_free_finalizers_after_copy: - ldr r4,[r8] - tst r4,#1 + ldr BSTACK_0,[ASTACK_2] + tst BSTACK_0,#1 beq finalizer_not_used_after_copy - ldr r8,[r8,#4] - sub r4,r4,#1 - str r4,[r6] - add r6,r4,#4 + ldr ASTACK_2,[ASTACK_2,#4] + sub BSTACK_0,BSTACK_0,#1 + str BSTACK_0,[ASTACK_0] + add ASTACK_0,BSTACK_0,#4 b determine_free_finalizers_after_copy finalizer_not_used_after_copy: - laol r12,__Nil-4,__Nil_o_m4,3 - otoa r12,__Nil_o_m4,3 - cmp r8,r12 + laol SCRATCH_REG,__Nil-4,__Nil_o_m4,3 + otoa SCRATCH_REG,__Nil_o_m4,3 + cmp ASTACK_2,SCRATCH_REG beq end_finalizers_after_copy - str r8,[r7] - add r7,r8,#4 - ldr r8,[r8,#4] + str ASTACK_2,[ASTACK_1] + add ASTACK_1,ASTACK_2,#4 + ldr ASTACK_2,[ASTACK_2,#4] b determine_free_finalizers_after_copy end_finalizers_after_copy: - str r8,[r6] - str r8,[r7] + str ASTACK_2,[ASTACK_0] + str ASTACK_2,[ASTACK_1] .endif b skip_copy_gc @@ -133,998 +132,998 @@ end_finalizers_after_copy: @ copy_lp2_lp1_all_pointers: - add r2,r8,r3,lsl #2 + add BSTACK_2,ASTACK_2,BSTACK_1,lsl #2 copy_lp2_lp1: copy_lp2: - ldr r7,[r8],#4 - sub r5,r8,#4 + ldr ASTACK_1,[ASTACK_2],#4 + sub HEAP_FREE,ASTACK_2,#4 copy_lp2__lp1: copy_lp2_: @ selectors: continue_after_selector_2: - ldr r6,[r7] - tst r6,#2 + ldr ASTACK_0,[ASTACK_1] + tst ASTACK_0,#2 beq not_in_hnf_2 in_hnf_2: - ldrh r4,[r6,#-2] - cmp r4,#0 + ldrh BSTACK_0,[ASTACK_0,#-2] + cmp BSTACK_0,#0 beq copy_arity_0_node2 - cmp r4,#256 + cmp BSTACK_0,#256 bhs copy_record_2 - subs r4,r4,#2 - str r10,[r5] + subs BSTACK_0,BSTACK_0,#2 + str HEAP_PTR,[HEAP_FREE] bhi copy_hnf_node2_3 - str r6,[r10] + str ASTACK_0,[HEAP_PTR] blo copy_hnf_node2_1 - ldr r6,[r7,#4] + ldr ASTACK_0,[ASTACK_1,#4] - str r10,[r7] - ldr r4,[r7,#8] + str HEAP_PTR,[ASTACK_1] + ldr BSTACK_0,[ASTACK_1,#8] - subs r3,r3,#1 - str r6,[r10,#4] + subs BSTACK_1,BSTACK_1,#1 + str ASTACK_0,[HEAP_PTR,#4] - str r4,[r10,#8] - add r10,r10,#12 + str BSTACK_0,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_hnf_node2_1: - ldr r4,[r7,#4] + ldr BSTACK_0,[ASTACK_1,#4] - subs r3,r3,#1 - str r10,[r7] + subs BSTACK_1,BSTACK_1,#1 + str HEAP_PTR,[ASTACK_1] - str r4,[r10,#4] - add r10,r10,#8 + str BSTACK_0,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_hnf_node2_3: - str r6,[r10],#1 + str ASTACK_0,[HEAP_PTR],#1 - str r10,[r7] - ldr r6,[r7,#4] + str HEAP_PTR,[ASTACK_1] + ldr ASTACK_0,[ASTACK_1,#4] - str r6,[r10,#4-1] - ldr r6,[r7,#8] + str ASTACK_0,[HEAP_PTR,#4-1] + ldr ASTACK_0,[ASTACK_1,#8] - add r10,r10,#12-1 - ldr r7,[r6] + add HEAP_PTR,HEAP_PTR,#12-1 + ldr ASTACK_1,[ASTACK_0] - tst r7,#1 + tst ASTACK_1,#1 bne arguments_already_copied_2 - str r10,[r10,#-4] + str HEAP_PTR,[HEAP_PTR,#-4] - str r7,[r10],#1 + str ASTACK_1,[HEAP_PTR],#1 - str r10,[r6],#4 - add r10,r10,#4-1 + str HEAP_PTR,[ASTACK_0],#4 + add HEAP_PTR,HEAP_PTR,#4-1 cp_hnf_arg_lp2: - ldr r7,[r6],#4 - str r7,[r10],#4 - subs r4,r4,#1 + ldr ASTACK_1,[ASTACK_0],#4 + str ASTACK_1,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bne cp_hnf_arg_lp2 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 arguments_already_copied_2: - str r7,[r10,#-4] + str ASTACK_1,[HEAP_PTR,#-4] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_arity_0_node2: - cmp r6,r0 @ INT+2 + cmp ASTACK_0,BSTACK_4 @ INT+2 blo copy_real_file_or_string_2 - cmp r6,r1 @ CHAR+2 + cmp ASTACK_0,BSTACK_3 @ CHAR+2 bhi copy_normal_hnf_0_2 copy_int_bool_or_char_2: - ldr r4,[r7,#4] + ldr BSTACK_0,[ASTACK_1,#4] beq copy_char_2 - cmp r6,r0 @ INT+2 + cmp ASTACK_0,BSTACK_4 @ INT+2 bne no_small_int_or_char_2 copy_int_2: - cmp r4,#33 + cmp BSTACK_0,#33 bhs no_small_int_or_char_2 - lao r12,small_integers,1 - subs r3,r3,#1 - otoa r12,small_integers,1 + lao SCRATCH_REG,small_integers,1 + subs BSTACK_1,BSTACK_1,#1 + otoa SCRATCH_REG,small_integers,1 - add r4,r12,r4,lsl #3 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #3 - str r4,[r5] + str BSTACK_0,[HEAP_FREE] bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_char_2: - and r4,r4,#255 + and BSTACK_0,BSTACK_0,#255 - lao r12,static_characters,1 - subs r3,r3,#1 - otoa r12,static_characters,1 + lao SCRATCH_REG,static_characters,1 + subs BSTACK_1,BSTACK_1,#1 + otoa SCRATCH_REG,static_characters,1 - add r4,r12,r4,lsl #3 + add BSTACK_0,SCRATCH_REG,BSTACK_0,lsl #3 - str r4,[r5] + str BSTACK_0,[HEAP_FREE] bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 no_small_int_or_char_2: copy_record_node2_1_b: - str r6,[r9,#-8] + str ASTACK_0,[ASTACK_PTR,#-8] - str r4,[r9,#-4] - sub r9,r9,#7 + str BSTACK_0,[ASTACK_PTR,#-4] + sub ASTACK_PTR,ASTACK_PTR,#7 - str r9,[r7] - sub r9,r9,#1 + str ASTACK_PTR,[ASTACK_1] + sub ASTACK_PTR,ASTACK_PTR,#1 - str r9,[r5] + str ASTACK_PTR,[HEAP_FREE] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_normal_hnf_0_2: - sub r6,r6,#2-ZERO_ARITY_DESCRIPTOR_OFFSET - subs r3,r3,#1 + sub ASTACK_0,ASTACK_0,#2-ZERO_ARITY_DESCRIPTOR_OFFSET + subs BSTACK_1,BSTACK_1,#1 - str r6,[r5] + str ASTACK_0,[HEAP_FREE] bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_real_file_or_string_2: - laol r12,__STRING__+2,__STRING___o_2,7 - otoa r12,__STRING___o_2,7 - cmp r6,r12 + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,7 + otoa SCRATCH_REG,__STRING___o_2,7 + cmp ASTACK_0,SCRATCH_REG bls copy_string_or_array_2 copy_real_or_file_2: - str r6,[r9,#-12] - sub r9,r9,#12-1 + str ASTACK_0,[ASTACK_PTR,#-12] + sub ASTACK_PTR,ASTACK_PTR,#12-1 - str r9,[r7] - sub r9,r9,#1 + str ASTACK_PTR,[ASTACK_1] + sub ASTACK_PTR,ASTACK_PTR,#1 - ldr r4,[r7,#4] - ldr r6,[r7,#8] + ldr BSTACK_0,[ASTACK_1,#4] + ldr ASTACK_0,[ASTACK_1,#8] - str r9,[r5] + str ASTACK_PTR,[HEAP_FREE] - str r4,[r9,#4] - subs r3,r3,#1 + str BSTACK_0,[ASTACK_PTR,#4] + subs BSTACK_1,BSTACK_1,#1 - str r6,[r9,#8] + str ASTACK_0,[ASTACK_PTR,#8] bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 already_copied_2: - add r6,r6,#1 - subs r3,r3,#1 + add ASTACK_0,ASTACK_0,#1 + subs BSTACK_1,BSTACK_1,#1 - str r6,[r5] + str ASTACK_0,[HEAP_FREE] bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_record_2: - ldrh r12,[r6,#-3+2] - sub r4,r4,#256 - subs r4,#2 + ldrh SCRATCH_REG,[ASTACK_0,#-3+2] + sub BSTACK_0,BSTACK_0,#256 + subs BSTACK_0,#2 bhi copy_record_node2_3 blo copy_record_node2_1 - cmp r12,#0 + cmp SCRATCH_REG,#0 beq copy_real_or_file_2 - str r10,[r5] - str r6,[r10] + str HEAP_PTR,[HEAP_FREE] + str ASTACK_0,[HEAP_PTR] - add r6,r10,#1 - ldr r4,[r7,#4] + add ASTACK_0,HEAP_PTR,#1 + ldr BSTACK_0,[ASTACK_1,#4] - str r6,[r7] + str ASTACK_0,[ASTACK_1] - str r4,[r10,#4] - ldr r4,[r7,#8] + str BSTACK_0,[HEAP_PTR,#4] + ldr BSTACK_0,[ASTACK_1,#8] - str r4,[r10,#8] + str BSTACK_0,[HEAP_PTR,#8] - add r10,r10,#12 - subs r3,r3,#1 + add HEAP_PTR,HEAP_PTR,#12 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_record_node2_1: - ldr r4,[r7,#4] + ldr BSTACK_0,[ASTACK_1,#4] - cmp r12,#0 + cmp SCRATCH_REG,#0 beq copy_record_node2_1_b - str r10,[r5] - str r6,[r10] + str HEAP_PTR,[HEAP_FREE] + str ASTACK_0,[HEAP_PTR] - add r6,r10,#1 - str r4,[r10,#4] + add ASTACK_0,HEAP_PTR,#1 + str BSTACK_0,[HEAP_PTR,#4] - str r6,[r7] + str ASTACK_0,[ASTACK_1] - add r10,r10,#8 - subs r3,r3,#1 + add HEAP_PTR,HEAP_PTR,#8 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_record_node2_3: - cmp r12,#1 + cmp SCRATCH_REG,#1 bls copy_record_node2_3_ab_or_b - str r4,[sp,#-4]! - add r4,r10,#1 + str BSTACK_0,[sp,#-4]! + add BSTACK_0,HEAP_PTR,#1 - str r4,[r7] - ldr r4,[r7,#8] + str BSTACK_0,[ASTACK_1] + ldr BSTACK_0,[ASTACK_1,#8] - str r6,[r10] - ldr r7,[r7,#4] + str ASTACK_0,[HEAP_PTR] + ldr ASTACK_1,[ASTACK_1,#4] - str r7,[r10,#4] - str r10,[r5] + str ASTACK_1,[HEAP_PTR,#4] + str HEAP_PTR,[HEAP_FREE] - ldr r12,[r4] - mov r6,r4 - tst r12,#1 + ldr SCRATCH_REG,[BSTACK_0] + mov ASTACK_0,BSTACK_0 + tst SCRATCH_REG,#1 bne record_arguments_already_copied_2 - add r7,r10,#12 + add ASTACK_1,HEAP_PTR,#12 - ldr r4,[sp],#4 - str r7,[r10,#8] + ldr BSTACK_0,[sp],#4 + str ASTACK_1,[HEAP_PTR,#8] - add r10,r10,#13 - ldr r7,[r6] + add HEAP_PTR,HEAP_PTR,#13 + ldr ASTACK_1,[ASTACK_0] - str r10,[r6],#4 + str HEAP_PTR,[ASTACK_0],#4 - str r7,[r10,#-1] - add r10,r10,#3 + str ASTACK_1,[HEAP_PTR,#-1] + add HEAP_PTR,HEAP_PTR,#3 cp_record_arg_lp2: - ldr r7,[r6],#4 + ldr ASTACK_1,[ASTACK_0],#4 - str r7,[r10],#4 + str ASTACK_1,[HEAP_PTR],#4 - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bne cp_record_arg_lp2 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 record_arguments_already_copied_2: - ldr r7,[r6] - ldr r4,[sp],#4 + ldr ASTACK_1,[ASTACK_0] + ldr BSTACK_0,[sp],#4 - str r7,[r10,#8] - add r10,r10,#12 + str ASTACK_1,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_record_node2_3_ab_or_b: blo copy_record_node2_3_b copy_record_node2_3_ab: - str r4,[sp,#-4]! - add r4,r10,#1 + str BSTACK_0,[sp,#-4]! + add BSTACK_0,HEAP_PTR,#1 - lao r12,heap_p1,9 + lao SCRATCH_REG,heap_p1,9 - str r4,[r7] - ldr r4,[r7,#8] + str BSTACK_0,[ASTACK_1] + ldr BSTACK_0,[ASTACK_1,#8] - ldo r12,r12,heap_p1,9 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,9 - str r6,[r10] - ldr r7,[r7,#4] + str ASTACK_0,[HEAP_PTR] + ldr ASTACK_1,[ASTACK_1,#4] - mov r6,r4 - sub r4,r4,r12 + mov ASTACK_0,BSTACK_0 + sub BSTACK_0,BSTACK_0,SCRATCH_REG - lao r12,heap_copied_vector,4 + lao SCRATCH_REG,heap_copied_vector,4 - str r7,[r10,#4] + str ASTACK_1,[HEAP_PTR,#4] - lsr r7,r4,#6 - lsr r4,r4,#3 + lsr ASTACK_1,BSTACK_0,#6 + lsr BSTACK_0,BSTACK_0,#3 - and r4,r4,#31 + and BSTACK_0,BSTACK_0,#31 - ldo r12,r12,heap_copied_vector,4 - and r7,r7,#-4 + ldo SCRATCH_REG,SCRATCH_REG,heap_copied_vector,4 + and ASTACK_1,ASTACK_1,#-4 - str r10,[r5] + str HEAP_PTR,[HEAP_FREE] - add r7,r7,r12 + add ASTACK_1,ASTACK_1,SCRATCH_REG - mov r12,#1 - lsl r4,r12,r4 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r7] - tst r4,r12 + ldr SCRATCH_REG,[ASTACK_1] + tst BSTACK_0,SCRATCH_REG bne record_arguments_already_copied_2 - orr r12,r12,r4 - str r12,[r7] - ldr r4,[sp],#4 + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[ASTACK_1] + ldr BSTACK_0,[sp],#4 - sub r9,r9,#4 + sub ASTACK_PTR,ASTACK_PTR,#4 - lsl r4,r4,#2 - sub r9,r9,r4 + lsl BSTACK_0,BSTACK_0,#2 + sub ASTACK_PTR,ASTACK_PTR,BSTACK_0 - str r9,[sp,#-4]! - add r9,r9,#1 + str ASTACK_PTR,[sp,#-4]! + add ASTACK_PTR,ASTACK_PTR,#1 - str r9,[r10,#8] - add r10,r10,#12 + str ASTACK_PTR,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 - ldr r7,[r6] + ldr ASTACK_1,[ASTACK_0] b cp_record_arg_lp3_c copy_record_node2_3_b: - str r4,[sp,#-4]! - add r4,r9,#-12+1 + str BSTACK_0,[sp,#-4]! + add BSTACK_0,ASTACK_PTR,#-12+1 - lao r12,heap_p1,10 + lao SCRATCH_REG,heap_p1,10 - str r4,[r7] - ldr r4,[r7,#8] + str BSTACK_0,[ASTACK_1] + ldr BSTACK_0,[ASTACK_1,#8] - ldo r12,r12,heap_p1,10 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,10 - str r6,[r9,#-12] - ldr r7,[r7,#4] + str ASTACK_0,[ASTACK_PTR,#-12] + ldr ASTACK_1,[ASTACK_1,#4] - mov r6,r4 - sub r4,r4,r12 + mov ASTACK_0,BSTACK_0 + sub BSTACK_0,BSTACK_0,SCRATCH_REG - lao r12,heap_copied_vector,5 + lao SCRATCH_REG,heap_copied_vector,5 - str r7,[r9,#-8] + str ASTACK_1,[ASTACK_PTR,#-8] - lsr r7,r4,#6 - sub r9,r9,#12 - lsr r4,r4,#3 + lsr ASTACK_1,BSTACK_0,#6 + sub ASTACK_PTR,ASTACK_PTR,#12 + lsr BSTACK_0,BSTACK_0,#3 - and r4,r4,#31 + and BSTACK_0,BSTACK_0,#31 - ldo r12,r12,heap_copied_vector,5 - and r7,r7,#-4 + ldo SCRATCH_REG,SCRATCH_REG,heap_copied_vector,5 + and ASTACK_1,ASTACK_1,#-4 - str r9,[r5] + str ASTACK_PTR,[HEAP_FREE] - add r7,r7,r12 + add ASTACK_1,ASTACK_1,SCRATCH_REG - mov r12,#1 - lsl r4,r12,r4 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r7] - tst r4,r12 + ldr SCRATCH_REG,[ASTACK_1] + tst BSTACK_0,SCRATCH_REG bne record_arguments_already_copied_3_b - orr r12,r12,r4 - str r12,[r7] - ldr r4,[sp],#4 + orr SCRATCH_REG,SCRATCH_REG,BSTACK_0 + str SCRATCH_REG,[ASTACK_1] + ldr BSTACK_0,[sp],#4 - mov r7,r9 - sub r9,r9,#4 + mov ASTACK_1,ASTACK_PTR + sub ASTACK_PTR,ASTACK_PTR,#4 - lsl r4,r4,#2 - sub r9,r9,r4 + lsl BSTACK_0,BSTACK_0,#2 + sub ASTACK_PTR,ASTACK_PTR,BSTACK_0 - str r9,[r7,#8] + str ASTACK_PTR,[ASTACK_1,#8] - ldr r7,[r6] + ldr ASTACK_1,[ASTACK_0] - str r9,[sp,#-4]! - add r9,r9,#1 + str ASTACK_PTR,[sp,#-4]! + add ASTACK_PTR,ASTACK_PTR,#1 cp_record_arg_lp3_c: - str r9,[r6],#4 + str ASTACK_PTR,[ASTACK_0],#4 - str r7,[r9,#-1] - add r9,r9,#3 + str ASTACK_1,[ASTACK_PTR,#-1] + add ASTACK_PTR,ASTACK_PTR,#3 cp_record_arg_lp3: - ldr r7,[r6],#4 + ldr ASTACK_1,[ASTACK_0],#4 - str r7,[r9],#4 + str ASTACK_1,[ASTACK_PTR],#4 - subs r4,r4,#4 + subs BSTACK_0,BSTACK_0,#4 bne cp_record_arg_lp3 - ldr r9,[sp],#4 + ldr ASTACK_PTR,[sp],#4 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 record_arguments_already_copied_3_b: - ldr r7,[r6] - ldr r4,[sp],#4 + ldr ASTACK_1,[ASTACK_0] + ldr BSTACK_0,[sp],#4 - sub r7,r7,#1 - str r7,[r9,#8] + sub ASTACK_1,ASTACK_1,#1 + str ASTACK_1,[ASTACK_PTR,#8] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 not_in_hnf_2: - tst r6,#1 + tst ASTACK_0,#1 beq already_copied_2 - ldr r4,[r6,#-5] - cmp r4,#0 + ldr BSTACK_0,[ASTACK_0,#-5] + cmp BSTACK_0,#0 ble copy_arity_0_node2_ copy_node2_1_: - and r4,r4,#255 - subs r4,r4,#2 + and BSTACK_0,BSTACK_0,#255 + subs BSTACK_0,BSTACK_0,#2 blt copy_arity_1_node2 copy_node2_3: - str r10,[r5] - str r6,[r10] - add r10,r10,#1 - str r10,[r7] - ldr r6,[r7,#4] - add r7,r7,#8 - str r6,[r10,#4-1] - add r10,r10,#8-1 + str HEAP_PTR,[HEAP_FREE] + str ASTACK_0,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,#1 + str HEAP_PTR,[ASTACK_1] + ldr ASTACK_0,[ASTACK_1,#4] + add ASTACK_1,ASTACK_1,#8 + str ASTACK_0,[HEAP_PTR,#4-1] + add HEAP_PTR,HEAP_PTR,#8-1 cp_arg_lp2: - ldr r6,[r7],#4 - str r6,[r10],#4 - subs r4,r4,#1 + ldr ASTACK_0,[ASTACK_1],#4 + str ASTACK_0,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bhs cp_arg_lp2 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_arity_1_node2__: - ldr r3,[sp],#4 + ldr BSTACK_1,[sp],#4 copy_arity_1_node2: copy_arity_1_node2_: - str r10,[r5] - add r10,r10,#1 + str HEAP_PTR,[HEAP_FREE] + add HEAP_PTR,HEAP_PTR,#1 - str r10,[r7] + str HEAP_PTR,[ASTACK_1] - ldr r4,[r7,#4] - str r6,[r10,#-1] + ldr BSTACK_0,[ASTACK_1,#4] + str ASTACK_0,[HEAP_PTR,#-1] - str r4,[r10,#4-1] - add r10,r10,#12-1 + str BSTACK_0,[HEAP_PTR,#4-1] + add HEAP_PTR,HEAP_PTR,#12-1 - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_indirection_2: - mov r4,r7 - ldr r7,[r7,#4] + mov BSTACK_0,ASTACK_1 + ldr ASTACK_1,[ASTACK_1,#4] - ldr r6,[r7] - tst r6,#2 + ldr ASTACK_0,[ASTACK_1] + tst ASTACK_0,#2 bne in_hnf_2 - tst r6,#1 + tst ASTACK_0,#1 beq already_copied_2 - ldr r12,[r6,#-4] - cmp r12,#-2 + ldr SCRATCH_REG,[ASTACK_0,#-4] + cmp SCRATCH_REG,#-2 beq skip_indirections_2 - movs r4,r12 + movs BSTACK_0,SCRATCH_REG ble copy_arity_0_node2_ b copy_node2_1_ skip_indirections_2: - ldr r7,[r7,#4] + ldr ASTACK_1,[ASTACK_1,#4] - ldr r6,[r7] - tst r6,#2 + ldr ASTACK_0,[ASTACK_1] + tst ASTACK_0,#2 bne update_indirection_list_2 - tst r6,#1 + tst ASTACK_0,#1 beq update_indirection_list_2 - ldr r12,[r6,#-4] - cmp r12,#-2 + ldr SCRATCH_REG,[ASTACK_0,#-4] + cmp SCRATCH_REG,#-2 beq skip_indirections_2 update_indirection_list_2: - add r6,r4,#4 - ldr r4,[r4,#4] - str r7,[r6] - cmp r7,r4 + add ASTACK_0,BSTACK_0,#4 + ldr BSTACK_0,[BSTACK_0,#4] + str ASTACK_1,[ASTACK_0] + cmp ASTACK_1,BSTACK_0 bne update_indirection_list_2 b continue_after_selector_2 copy_selector_2: - cmp r4,#-2 + cmp BSTACK_0,#-2 beq copy_indirection_2 blt copy_record_selector_2 - ldr r4,[r7,#4] + ldr BSTACK_0,[ASTACK_1,#4] - str r3,[sp,#-4]! + str BSTACK_1,[sp,#-4]! - ldr r3,[r4] - tst r3,#2 + ldr BSTACK_1,[BSTACK_0] + tst BSTACK_1,#2 beq copy_arity_1_node2__ - ldrh r12,[r3,#-3] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_1,#-3] + cmp SCRATCH_REG,#2 bls copy_selector_2_ - ldr r3,[r4,#8] - ldrb r12,[r3] - tst r12,#1 + ldr BSTACK_1,[BSTACK_0,#8] + ldrb SCRATCH_REG,[BSTACK_1] + tst SCRATCH_REG,#1 bne copy_arity_1_node2__ .ifdef PIC - add r11,r6,#-9+4 + add ASTACK_3,ASTACK_0,#-9+4 .endif - ldr r6,[r6,#-9] - lao r12,e__system__nind,8 + ldr ASTACK_0,[ASTACK_0,#-9] + lao SCRATCH_REG,e__system__nind,8 .ifdef PIC - ldrh r6,[r11,r6] + ldrh ASTACK_0,[ASTACK_3,ASTACK_0] .else - ldrh r6,[r6,#4] + ldrh ASTACK_0,[ASTACK_0,#4] .endif - otoa r12,e__system__nind,8 - str r12,[r7] + otoa SCRATCH_REG,e__system__nind,8 + str SCRATCH_REG,[ASTACK_1] - cmp r6,#8 + cmp ASTACK_0,#8 blt copy_selector_2_1 beq copy_selector_2_2 - sub r3,r3,#12 - ldr r6,[r6,r3] - ldr r3,[sp],#4 - str r6,[r7,#4] - mov r7,r6 + sub BSTACK_1,BSTACK_1,#12 + ldr ASTACK_0,[ASTACK_0,BSTACK_1] + ldr BSTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_1,ASTACK_0 b continue_after_selector_2 copy_selector_2_1: - ldr r6,[r4,#4] - ldr r3,[sp],#4 - str r6,[r7,#4] - mov r7,r6 + ldr ASTACK_0,[BSTACK_0,#4] + ldr BSTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_1,ASTACK_0 b continue_after_selector_2 copy_selector_2_2: - ldr r6,[r3] - ldr r3,[sp],#4 - str r6,[r7,#4] - mov r7,r6 + ldr ASTACK_0,[BSTACK_1] + ldr BSTACK_1,[sp],#4 + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_1,ASTACK_0 b continue_after_selector_2 copy_selector_2_: .ifdef PIC - add r11,r6,#-9+4 + add ASTACK_3,ASTACK_0,#-9+4 .endif - ldr r6,[r6,#-9] - ldr r3,[sp],#4 + ldr ASTACK_0,[ASTACK_0,#-9] + ldr BSTACK_1,[sp],#4 - lao r12,e__system__nind,9 + lao SCRATCH_REG,e__system__nind,9 .ifdef PIC - ldrh r6,[r11,r6] + ldrh ASTACK_0,[ASTACK_3,ASTACK_0] .else - ldrh r6,[r6,#4] + ldrh ASTACK_0,[ASTACK_0,#4] .endif - otoa r12,e__system__nind,9 - str r12,[r7] + otoa SCRATCH_REG,e__system__nind,9 + str SCRATCH_REG,[ASTACK_1] - ldr r6,[r4,r6] - str r6,[r7,#4] - mov r7,r6 + ldr ASTACK_0,[BSTACK_0,ASTACK_0] + str ASTACK_0,[ASTACK_1,#4] + mov ASTACK_1,ASTACK_0 b continue_after_selector_2 copy_record_selector_2: - cmp r4,#-3 - ldr r4,[r7,#4] - ldr r4,[r4] + cmp BSTACK_0,#-3 + ldr BSTACK_0,[ASTACK_1,#4] + ldr BSTACK_0,[BSTACK_0] beq copy_strict_record_selector_2 - tst r4,#2 + tst BSTACK_0,#2 beq copy_arity_1_node2_ - ldrh r12,[r4,#-3] - mov r11,#258/2 - cmp r12,r11,lsl #1 + ldrh SCRATCH_REG,[BSTACK_0,#-3] + mov ASTACK_3,#258/2 + cmp SCRATCH_REG,ASTACK_3,lsl #1 bls copy_record_selector_2_ - ldrh r12,[r4,#-3+2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_0,#-3+2] + cmp SCRATCH_REG,#2 bhs copy_selector_2__ - lao r12,heap_p1,11 + lao SCRATCH_REG,heap_p1,11 - ldr r4,[r7,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_1,#4] + str ASTACK_1,[sp,#-4]! - ldo r12,r12,heap_p1,11 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,11 - ldr r4,[r4,#8] + ldr BSTACK_0,[BSTACK_0,#8] - sub r4,r4,r12 + sub BSTACK_0,BSTACK_0,SCRATCH_REG - lao r12,heap_copied_vector,6 + lao SCRATCH_REG,heap_copied_vector,6 - lsr r7,r4,#6 - lsr r4,r4,#3 + lsr ASTACK_1,BSTACK_0,#6 + lsr BSTACK_0,BSTACK_0,#3 - ldo r12,r12,heap_copied_vector,6 + ldo SCRATCH_REG,SCRATCH_REG,heap_copied_vector,6 - and r7,r7,#-4 - and r4,r4,#31 + and ASTACK_1,ASTACK_1,#-4 + and BSTACK_0,BSTACK_0,#31 - add r7,r7,r12 + add ASTACK_1,ASTACK_1,SCRATCH_REG - mov r12,#1 - lsl r4,r12,r4 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r7] - ands r4,r4,r12 - ldr r7,[sp],#4 + ldr SCRATCH_REG,[ASTACK_1] + ands BSTACK_0,BSTACK_0,SCRATCH_REG + ldr ASTACK_1,[sp],#4 beq copy_record_selector_2_ b copy_arity_1_node2_ copy_selector_2__: - ldr r4,[r7,#4] - ldr r4,[r4,#8] - ldrb r12,[r4] - tst r12,#1 + ldr BSTACK_0,[ASTACK_1,#4] + ldr BSTACK_0,[BSTACK_0,#8] + ldrb SCRATCH_REG,[BSTACK_0] + tst SCRATCH_REG,#1 bne copy_arity_1_node2_ copy_record_selector_2_: .ifdef PIC - add r11,r6,#-9+4 + add ASTACK_3,ASTACK_0,#-9+4 .endif - ldr r4,[r6,#-9] - lao r12,e__system__nind,10 - ldr r6,[r7,#4] - otoa r12,e__system__nind,10 - str r12,[r7] + ldr BSTACK_0,[ASTACK_0,#-9] + lao SCRATCH_REG,e__system__nind,10 + ldr ASTACK_0,[ASTACK_1,#4] + otoa SCRATCH_REG,e__system__nind,10 + str SCRATCH_REG,[ASTACK_1] .ifdef PIC - ldrh r4,[r11,r4] + ldrh BSTACK_0,[ASTACK_3,BSTACK_0] .else - ldrh r4,[r4,#4] + ldrh BSTACK_0,[BSTACK_0,#4] .endif - cmp r4,#8 + cmp BSTACK_0,#8 ble copy_record_selector_3 - ldr r6,[r6,#8] - sub r4,r4,#12 + ldr ASTACK_0,[ASTACK_0,#8] + sub BSTACK_0,BSTACK_0,#12 copy_record_selector_3: - ldr r6,[r6,r4] + ldr ASTACK_0,[ASTACK_0,BSTACK_0] - str r6,[r7,#4] + str ASTACK_0,[ASTACK_1,#4] - mov r7,r6 + mov ASTACK_1,ASTACK_0 b continue_after_selector_2 copy_strict_record_selector_2: - tst r4,#2 + tst BSTACK_0,#2 beq copy_arity_1_node2_ - ldrh r12,[r4,#-3] - mov r11,#258/2 - cmp r12,r11,lsl #1 + ldrh SCRATCH_REG,[BSTACK_0,#-3] + mov ASTACK_3,#258/2 + cmp SCRATCH_REG,ASTACK_3,lsl #1 bls copy_strict_record_selector_2_ - ldrh r12,[r4,#-3+2] - cmp r12,#2 + ldrh SCRATCH_REG,[BSTACK_0,#-3+2] + cmp SCRATCH_REG,#2 blo copy_strict_record_selector_2_b - ldr r4,[r7,#4] - ldr r4,[r4,#8] - ldrb r12,[r4] - tst r12,#1 + ldr BSTACK_0,[ASTACK_1,#4] + ldr BSTACK_0,[BSTACK_0,#8] + ldrb SCRATCH_REG,[BSTACK_0] + tst SCRATCH_REG,#1 bne copy_arity_1_node2_ b copy_strict_record_selector_2_ copy_strict_record_selector_2_b: - lao r12,heap_p1,12 + lao SCRATCH_REG,heap_p1,12 - ldr r4,[r7,#4] - str r7,[sp,#-4]! + ldr BSTACK_0,[ASTACK_1,#4] + str ASTACK_1,[sp,#-4]! - ldo r12,r12,heap_p1,12 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,12 - ldr r4,[r4,#8] + ldr BSTACK_0,[BSTACK_0,#8] - sub r4,r4,r12 + sub BSTACK_0,BSTACK_0,SCRATCH_REG - lao r12,heap_copied_vector,7 + lao SCRATCH_REG,heap_copied_vector,7 - lsr r7,r4,#6 - lsr r4,r4,#3 + lsr ASTACK_1,BSTACK_0,#6 + lsr BSTACK_0,BSTACK_0,#3 - ldo r12,r12,heap_copied_vector,7 + ldo SCRATCH_REG,SCRATCH_REG,heap_copied_vector,7 - and r7,r7,#-4 - and r4,r4,#31 + and ASTACK_1,ASTACK_1,#-4 + and BSTACK_0,BSTACK_0,#31 - add r7,r7,r12 + add ASTACK_1,ASTACK_1,SCRATCH_REG - mov r12,#1 - lsl r4,r12,r4 + mov SCRATCH_REG,#1 + lsl BSTACK_0,SCRATCH_REG,BSTACK_0 - ldr r12,[r7] - ands r4,r4,r12 - ldr r7,[sp],#4 + ldr SCRATCH_REG,[ASTACK_1] + ands BSTACK_0,BSTACK_0,SCRATCH_REG + ldr ASTACK_1,[sp],#4 bne copy_arity_1_node2_ copy_strict_record_selector_2_: .ifdef PIC - add r11,r6,#-9+4 + add ASTACK_3,ASTACK_0,#-9+4 .endif - ldr r4,[r6,#-9] + ldr BSTACK_0,[ASTACK_0,#-9] - str r3,[sp,#-4]! - ldr r6,[r7,#4] + str BSTACK_1,[sp,#-4]! + ldr ASTACK_0,[ASTACK_1,#4] .ifdef PIC - ldrh r3,[r4,r11]! + ldrh BSTACK_1,[BSTACK_0,ASTACK_3]! .else - ldrh r3,[r4,#4] + ldrh BSTACK_1,[BSTACK_0,#4] .endif - cmp r3,#8 + cmp BSTACK_1,#8 ble copy_strict_record_selector_3 - ldr r12,[r6,#8] - add r3,r3,r12 - ldr r3,[r3,#-12] + ldr SCRATCH_REG,[ASTACK_0,#8] + add BSTACK_1,BSTACK_1,SCRATCH_REG + ldr BSTACK_1,[BSTACK_1,#-12] b copy_strict_record_selector_4 copy_strict_record_selector_3: - ldr r3,[r6,r3] + ldr BSTACK_1,[ASTACK_0,BSTACK_1] copy_strict_record_selector_4: - str r3,[r7,#4] + str BSTACK_1,[ASTACK_1,#4] .ifdef PIC - ldrh r3,[r4,#6-4] + ldrh BSTACK_1,[BSTACK_0,#6-4] .else - ldrh r3,[r4,#6] + ldrh BSTACK_1,[BSTACK_0,#6] .endif - tst r3,r3 + tst BSTACK_1,BSTACK_1 beq copy_strict_record_selector_6 - cmp r3,#8 + cmp BSTACK_1,#8 ble copy_strict_record_selector_5 - ldr r6,[r6,#8] - sub r3,r3,#12 + ldr ASTACK_0,[ASTACK_0,#8] + sub BSTACK_1,BSTACK_1,#12 copy_strict_record_selector_5: - ldr r3,[r6,r3] - str r3,[r7,#8] + ldr BSTACK_1,[ASTACK_0,BSTACK_1] + str BSTACK_1,[ASTACK_1,#8] copy_strict_record_selector_6: .ifdef PIC - ldr r6,[r4,#-4-4] + ldr ASTACK_0,[BSTACK_0,#-4-4] .else - ldr r6,[r4,#-4] + ldr ASTACK_0,[BSTACK_0,#-4] .endif - str r6,[r7] - ldr r3,[sp],#4 - tst r6,#2 + str ASTACK_0,[ASTACK_1] + ldr BSTACK_1,[sp],#4 + tst ASTACK_0,#2 bne in_hnf_2 hlt: b hlt copy_arity_0_node2_: blt copy_selector_2 - str r6,[r9,#-12]! - str r9,[r5] - add r4,r9,#1 - @str r4,[r5] - @sub r4,r4,#1 - @mov r4,r9 + str ASTACK_0,[ASTACK_PTR,#-12]! + str ASTACK_PTR,[HEAP_FREE] + add BSTACK_0,ASTACK_PTR,#1 + @str BSTACK_0,[HEAP_FREE] + @sub BSTACK_0,BSTACK_0,#1 + @mov BSTACK_0,ASTACK_PTR - str r4,[r7] + str BSTACK_0,[ASTACK_1] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_string_or_array_2: .ifdef DLL beq copy_string_2 - laol r12,__ARRAY__+2,__ARRAY___o_2,15 - otoa r12,__ARRAY___o_2,15 - cmp r6,r12 + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,15 + otoa SCRATCH_REG,__ARRAY___o_2,15 + cmp ASTACK_0,SCRATCH_REG blo copy_normal_hnf_0_2 - mov r6,r7 + mov ASTACK_0,ASTACK_1 b copy_array_2 copy_string_2: - mov r6,r7 + mov ASTACK_0,ASTACK_1 .else - mov r6,r7 + mov ASTACK_0,ASTACK_1 bne copy_array_2 .endif - lao r12,heap_p1,13 - ldo r12,r12,heap_p1,13 - sub r7,r7,r12 + lao SCRATCH_REG,heap_p1,13 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,13 + sub ASTACK_1,ASTACK_1,SCRATCH_REG - lao r12,semi_space_size,1 - ldo r12,r12,semi_space_size,1 - cmp r7,r12 + lao SCRATCH_REG,semi_space_size,1 + ldo SCRATCH_REG,SCRATCH_REG,semi_space_size,1 + cmp ASTACK_1,SCRATCH_REG bhs copy_string_or_array_constant - ldr r7,[r6,#4] + ldr ASTACK_1,[ASTACK_0,#4] - add r7,r7,#3 - str r3,[sp,#-4]! + add ASTACK_1,ASTACK_1,#3 + str BSTACK_1,[sp,#-4]! - lsr r4,r7,#2 - and r7,r7,#-4 + lsr BSTACK_0,ASTACK_1,#2 + and ASTACK_1,ASTACK_1,#-4 - sub r9,r9,r7 + sub ASTACK_PTR,ASTACK_PTR,ASTACK_1 - ldr r3,[r6],#4 + ldr BSTACK_1,[ASTACK_0],#4 - str r3,[r9,#-8]! + str BSTACK_1,[ASTACK_PTR,#-8]! - str r9,[r5] - add r7,r9,#1 + str ASTACK_PTR,[HEAP_FREE] + add ASTACK_1,ASTACK_PTR,#1 - str r7,[r6,#-4] - add r7,r9,#4 + str ASTACK_1,[ASTACK_0,#-4] + add ASTACK_1,ASTACK_PTR,#4 cp_s_arg_lp2: - ldr r3,[r6],#4 + ldr BSTACK_1,[ASTACK_0],#4 - str r3,[r7],#4 + str BSTACK_1,[ASTACK_1],#4 - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bge cp_s_arg_lp2 - ldr r3,[sp],#4 - subs r3,r3,#1 + ldr BSTACK_1,[sp],#4 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_array_2: - lao r12,heap_p1,14 - ldo r12,r12,heap_p1,14 - sub r7,r7,r12 + lao SCRATCH_REG,heap_p1,14 + ldo SCRATCH_REG,SCRATCH_REG,heap_p1,14 + sub ASTACK_1,ASTACK_1,SCRATCH_REG - lao r12,semi_space_size,2 - ldo r12,r12,semi_space_size,2 - cmp r7,r12 + lao SCRATCH_REG,semi_space_size,2 + ldo SCRATCH_REG,SCRATCH_REG,semi_space_size,2 + cmp ASTACK_1,SCRATCH_REG bhs copy_string_or_array_constant - str r3,[sp,#-4]! + str BSTACK_1,[sp,#-4]! - ldr r4,[r6,#8] - cmp r4,#0 + ldr BSTACK_0,[ASTACK_0,#8] + cmp BSTACK_0,#0 beq copy_array_a2 - ldrh r3,[r4,#-3] + ldrh BSTACK_1,[BSTACK_0,#-3] - cmp r3,#0 + cmp BSTACK_1,#0 beq copy_strict_basic_array_2 - sub r3,r3,#256 - ldr r12,[r6,#4] - mul r3,r12,r3 + sub BSTACK_1,BSTACK_1,#256 + ldr SCRATCH_REG,[ASTACK_0,#4] + mul BSTACK_1,SCRATCH_REG,BSTACK_1 b copy_array_a3 copy_array_a2: - ldr r3,[r6,#4] + ldr BSTACK_1,[ASTACK_0,#4] copy_array_a3: - mov r7,r10 + mov ASTACK_1,HEAP_PTR - add r10,r10,#12 - add r10,r10,r3,lsl #2 + add HEAP_PTR,HEAP_PTR,#12 + add HEAP_PTR,HEAP_PTR,BSTACK_1,lsl #2 - str r7,[r5] - ldr r4,[r6] + str ASTACK_1,[HEAP_FREE] + ldr BSTACK_0,[ASTACK_0] - str r4,[r7] + str BSTACK_0,[ASTACK_1] - add r4,r7,#1 - add r7,r7,#4 + add BSTACK_0,ASTACK_1,#1 + add ASTACK_1,ASTACK_1,#4 - str r4,[r6],#4 + str BSTACK_0,[ASTACK_0],#4 - sub r4,r3,#1 + sub BSTACK_0,BSTACK_1,#1 b cp_s_arg_lp2 copy_strict_basic_array_2: - ldr r3,[r6,#4] - cmp r4,r0 @ INT+2 + ldr BSTACK_1,[ASTACK_0,#4] + cmp BSTACK_0,BSTACK_4 @ INT+2 beq copy_int_array_2 - laol r12,BOOL+2,BOOL_o_2,4 - otoa r12,BOOL_o_2,4 - cmp r4,r12 + laol SCRATCH_REG,BOOL+2,BOOL_o_2,4 + otoa SCRATCH_REG,BOOL_o_2,4 + cmp BSTACK_0,SCRATCH_REG beq copy_bool_array_2 - add r3,r3,r3 + add BSTACK_1,BSTACK_1,BSTACK_1 copy_int_array_2: - add r7,r9,#-12 + add ASTACK_1,ASTACK_PTR,#-12 - sub r7,r7,r3,lsl #2 - ldr r4,[r6] + sub ASTACK_1,ASTACK_1,BSTACK_1,lsl #2 + ldr BSTACK_0,[ASTACK_0] - str r7,[r5] + str ASTACK_1,[HEAP_FREE] - mov r9,r7 + mov ASTACK_PTR,ASTACK_1 - str r4,[r7] - add r4,r7,#1 + str BSTACK_0,[ASTACK_1] + add BSTACK_0,ASTACK_1,#1 - add r7,r7,#4 - str r4,[r6],#4 + add ASTACK_1,ASTACK_1,#4 + str BSTACK_0,[ASTACK_0],#4 - add r4,r3,#1 + add BSTACK_0,BSTACK_1,#1 b cp_s_arg_lp2 copy_bool_array_2: - add r3,r3,#3 - lsr r3,r3,#2 + add BSTACK_1,BSTACK_1,#3 + lsr BSTACK_1,BSTACK_1,#2 b copy_int_array_2 copy_string_or_array_constant: - str r6,[r5] + str ASTACK_0,[HEAP_FREE] - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bne copy_lp2 - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 @ @@ -1132,175 +1131,175 @@ copy_string_or_array_constant: @ copy_lp1: - cmp r8,r10 + cmp ASTACK_2,HEAP_PTR bhs end_copy1 - ldr r4,[r8],#4 - tst r4,#2 + ldr BSTACK_0,[ASTACK_2],#4 + tst BSTACK_0,#2 beq not_in_hnf_1 in_hnf_1: - ldrh r3,[r4,#-2] + ldrh BSTACK_1,[BSTACK_0,#-2] - cmp r3,#0 + cmp BSTACK_1,#0 beq copy_array_21 - cmp r3,#2 + cmp BSTACK_1,#2 bls copy_lp2_lp1_all_pointers - cmp r3,#256 + cmp BSTACK_1,#256 bhs copy_record_21 - ldr r12,[r8,#4] - tst r12,#1 + ldr SCRATCH_REG,[ASTACK_2,#4] + tst SCRATCH_REG,#1 bne node_without_arguments_part - ldr r7,[r8],#8 - sub r5,r8,#8 - sub r2,r8,#4 - add r2,r2,r3,lsl #2 + ldr ASTACK_1,[ASTACK_2],#8 + sub HEAP_FREE,ASTACK_2,#8 + sub BSTACK_2,ASTACK_2,#4 + add BSTACK_2,BSTACK_2,BSTACK_1,lsl #2 b copy_lp2__lp1 copy_record_21: - sub r3,r3,#256 - subs r3,r3,#2 + sub BSTACK_1,BSTACK_1,#256 + subs BSTACK_1,BSTACK_1,#2 bhi copy_record_arguments_3 - ldrh r3,[r4,#-3+2] + ldrh BSTACK_1,[BSTACK_0,#-3+2] blo copy_record_arguments_1 - add r2,r8,#8 + add BSTACK_2,ASTACK_2,#8 - cmp r3,#1 + cmp BSTACK_1,#1 bhi copy_lp2_lp1 b copy_node_arity1 copy_record_arguments_1: - add r2,r8,#4 + add BSTACK_2,ASTACK_2,#4 b copy_lp2_lp1 copy_record_arguments_3: - ldr r12,[r8,#4] - tst r12,#1 + ldr SCRATCH_REG,[ASTACK_2,#4] + tst SCRATCH_REG,#1 bne record_node_without_arguments_part - ldrh r7,[r4,#-3+2] + ldrh ASTACK_1,[BSTACK_0,#-3+2] - add r6,r8,r3,lsl #2 - add r2,r6,#3*4 - mov r3,r7 + add ASTACK_0,ASTACK_2,BSTACK_1,lsl #2 + add BSTACK_2,ASTACK_0,#3*4 + mov BSTACK_1,ASTACK_1 - ldr r7,[r8],#8 - sub r5,r8,#8 + ldr ASTACK_1,[ASTACK_2],#8 + sub HEAP_FREE,ASTACK_2,#8 b copy_lp2__lp1 node_without_arguments_part: record_node_without_arguments_part: - ldr r7,[r8],#8 - sub r4,r12,#1 + ldr ASTACK_1,[ASTACK_2],#8 + sub BSTACK_0,SCRATCH_REG,#1 - mov r3,#1 - sub r5,r8,#8 - str r4,[r8,#-4] - mov r2,r8 + mov BSTACK_1,#1 + sub HEAP_FREE,ASTACK_2,#8 + str BSTACK_0,[ASTACK_2,#-4] + mov BSTACK_2,ASTACK_2 b copy_lp2__lp1 not_in_hnf_1: - ldr r3,[r4,#-5] - cmp r3,#256 + ldr BSTACK_1,[BSTACK_0,#-5] + cmp BSTACK_1,#256 bgt copy_unboxed_closure_arguments - cmp r3,#1 + cmp BSTACK_1,#1 bgt copy_lp2_lp1_all_pointers copy_node_arity1: - ldr r7,[r8],#8 - mov r3,#1 - sub r5,r8,#8 - mov r2,r8 + ldr ASTACK_1,[ASTACK_2],#8 + mov BSTACK_1,#1 + sub HEAP_FREE,ASTACK_2,#8 + mov BSTACK_2,ASTACK_2 b copy_lp2__lp1 copy_unboxed_closure_arguments: - ldr r12,=257 - cmp r3,r12 + ldr SCRATCH_REG,=257 + cmp BSTACK_1,SCRATCH_REG beq copy_unboxed_closure_arguments1 - uxtb r4,r3,ror #8 - and r2,r3,#255 + uxtb BSTACK_0,BSTACK_1,ror #8 + and BSTACK_2,BSTACK_1,#255 - subs r3,r2,r4 - add r2,r8,r2,lsl #2 + subs BSTACK_1,BSTACK_2,BSTACK_0 + add BSTACK_2,ASTACK_2,BSTACK_2,lsl #2 bne copy_lp2_lp1 copy_unboxed_closure_arguments_without_pointers: - mov r8,r2 + mov ASTACK_2,BSTACK_2 b copy_lp1 copy_unboxed_closure_arguments1: - add r8,r8,#8 + add ASTACK_2,ASTACK_2,#8 b copy_lp1 copy_array_21: - ldr r3,[r8,#4] - add r8,r8,#8 - cmp r3,#0 + ldr BSTACK_1,[ASTACK_2,#4] + add ASTACK_2,ASTACK_2,#8 + cmp BSTACK_1,#0 beq copy_array_21_a - ldrh r4,[r3,#-3] - ldrh r3,[r3,#-3+2] - sub r4,r4,#256 - cmp r3,#0 + ldrh BSTACK_0,[BSTACK_1,#-3] + ldrh BSTACK_1,[BSTACK_1,#-3+2] + sub BSTACK_0,BSTACK_0,#256 + cmp BSTACK_1,#0 beq copy_array_21_b - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 bne copy_array_21_ab copy_array_21_r_a: - ldr r3,[r8,#-9] - mul r3,r4,r3 - cmp r3,#0 + ldr BSTACK_1,[ASTACK_2,#-9] + mul BSTACK_1,BSTACK_0,BSTACK_1 + cmp BSTACK_1,#0 beq copy_lp1 b copy_lp2_lp1_all_pointers copy_array_21_a: - ldr r3,[r8,#-9] - cmp r3,#0 + ldr BSTACK_1,[ASTACK_2,#-9] + cmp BSTACK_1,#0 beq copy_lp1 b copy_lp2_lp1_all_pointers copy_array_21_b: - ldr r3,[r8,#-9] - mul r3,r4,r3 - add r8,r8,r3,lsl #2 + ldr BSTACK_1,[ASTACK_2,#-9] + mul BSTACK_1,BSTACK_0,BSTACK_1 + add ASTACK_2,ASTACK_2,BSTACK_1,lsl #2 b copy_lp1 copy_array_21_ab: - ldr r12,[r8,#-9] - cmp r12,#0 + ldr SCRATCH_REG,[ASTACK_2,#-9] + cmp SCRATCH_REG,#0 beq copy_lp1 - str r12,[sp,#0] - lsl r4,r4,#2 - str r3,[sp,#8] - str r4,[sp,#4] + str SCRATCH_REG,[sp,#0] + lsl BSTACK_0,BSTACK_0,#2 + str BSTACK_1,[sp,#8] + str BSTACK_0,[sp,#4] copy_array_21_lp_ab: - add r2,r8,r4 - str r2,[sp,#12] - mov r2,#-1 + add BSTACK_2,ASTACK_2,BSTACK_0 + str BSTACK_2,[sp,#12] + mov BSTACK_2,#-1 b copy_lp2 end_copy1: - cmp r8,#-1 + cmp ASTACK_2,#-1 it ne bxne lr copy_array_21_lp_ab_next: - ldr r8,[sp,#12] - ldr r12,[sp] - ldr r3,[sp,#8] - ldr r4,[sp,#4] - subs r12,r12,#1 - str r12,[sp] + ldr ASTACK_2,[sp,#12] + ldr SCRATCH_REG,[sp] + ldr BSTACK_1,[sp,#8] + ldr BSTACK_0,[sp,#4] + subs SCRATCH_REG,SCRATCH_REG,#1 + str SCRATCH_REG,[sp] bne copy_array_21_lp_ab b copy_lp1 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< a0: array +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_2: element size, BSTACK_3: element a size, a0:a_element-> a0: array .thumb_func _create_r_array: - mul r12,r4,r2 - add r12,r12,#3 - subs r5,r5,r12 + mul SCRATCH_REG,BSTACK_0,BSTACK_2 + add SCRATCH_REG,SCRATCH_REG,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4586 bl collect_1 no_collect_4586: - mov r8,r6 + mov ASTACK_2,ASTACK_0 - laol r12,__ARRAY__+2,__ARRAY___o_2,5 - otoa r12,__ARRAY___o_2,5 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,5 + otoa SCRATCH_REG,__ARRAY___o_2,5 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] - mov r6,r10 - add r10,r10,#12 + mov ASTACK_0,HEAP_PTR + add HEAP_PTR,HEAP_PTR,#12 -@ r4: number of elements, a0: array -@ r2: element size, r1: element a size, a2:a_element +@ BSTACK_0: number of elements, a0: array +@ BSTACK_2: element size, BSTACK_3: element a size, a2:a_element - cmp r1,#0 + cmp BSTACK_3,#0 beq _create_r_array_0 - cmp r1,#2 + cmp BSTACK_3,#2 blo _create_r_array_1 beq _create_r_array_2 - cmp r1,#4 + cmp BSTACK_3,#4 blo _create_r_array_3 beq _create_r_array_4 b _create_r_array_5 _create_r_array_0: - lsl r2,r2,#2 - mul r12,r4,r2 - add r10,r10,r12 + lsl BSTACK_2,BSTACK_2,#2 + mul SCRATCH_REG,BSTACK_0,BSTACK_2 + add HEAP_PTR,HEAP_PTR,SCRATCH_REG ldr pc,[sp],#4 _create_r_array_1: - lsl r2,r2,#2 - b _st_fillr1_array -_fillr1_array: - str r8,[r10] - add r10,r10,r2 -_st_fillr1_array: - subs r4,r4,#1 - bcs _fillr1_array + lsl BSTACK_2,BSTACK_2,#2 + b _st_fillBSTACK_3_array +_fillBSTACK_3_array: + str ASTACK_2,[HEAP_PTR] + add HEAP_PTR,HEAP_PTR,BSTACK_2 +_st_fillBSTACK_3_array: + subs BSTACK_0,BSTACK_0,#1 + bcs _fillBSTACK_3_array ldr pc,[sp],#4 _create_r_array_2: - lsl r2,r2,#2 - b _st_fillr2_array -_fillr2_array: - str r8,[r10] - str r8,[r10,#4] - add r10,r10,r2 -_st_fillr2_array: - subs r4,r4,#1 - bcs _fillr2_array + lsl BSTACK_2,BSTACK_2,#2 + b _st_fillBSTACK_2_array +_fillBSTACK_2_array: + str ASTACK_2,[HEAP_PTR] + str ASTACK_2,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,BSTACK_2 +_st_fillBSTACK_2_array: + subs BSTACK_0,BSTACK_0,#1 + bcs _fillBSTACK_2_array ldr pc,[sp],#4 _create_r_array_3: - lsl r2,r2,#2 - b _st_fillr3_array -_fillr3_array: - str r8,[r10] - str r8,[r10,#4] - str r8,[r10,#8] - add r10,r10,r2 -_st_fillr3_array: - subs r4,r4,#1 - bcs _fillr3_array + lsl BSTACK_2,BSTACK_2,#2 + b _st_fillBSTACK_1_array +_fillBSTACK_1_array: + str ASTACK_2,[HEAP_PTR] + str ASTACK_2,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,BSTACK_2 +_st_fillBSTACK_1_array: + subs BSTACK_0,BSTACK_0,#1 + bcs _fillBSTACK_1_array ldr pc,[sp],#4 _create_r_array_4: - lsl r2,r2,#2 - b _st_fillr4_array -_fillr4_array: - str r8,[r10] - str r8,[r10,#4] - str r8,[r10,#8] - str r8,[r10,#12] - add r10,r10,r2 -_st_fillr4_array: - subs r4,r4,#1 - bcs _fillr4_array + lsl BSTACK_2,BSTACK_2,#2 + b _st_fillBSTACK_0_array +_fillBSTACK_0_array: + str ASTACK_2,[HEAP_PTR] + str ASTACK_2,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_2,[HEAP_PTR,#12] + add HEAP_PTR,HEAP_PTR,BSTACK_2 +_st_fillBSTACK_0_array: + subs BSTACK_0,BSTACK_0,#1 + bcs _fillBSTACK_0_array ldr pc,[sp],#4 _create_r_array_5: - sub r2,r2,r1 - lsl r2,r2,#2 + sub BSTACK_2,BSTACK_2,BSTACK_3 + lsl BSTACK_2,BSTACK_2,#2 b _st_fillr5_array _fillr5_array: - str r8,[r10] - str r8,[r10,#4] - str r8,[r10,#8] - str r8,[r10,#12] - add r10,r10,#16 + str ASTACK_2,[HEAP_PTR] + str ASTACK_2,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + str ASTACK_2,[HEAP_PTR,#12] + add HEAP_PTR,HEAP_PTR,#16 - sub r3,r1,#5 + sub BSTACK_1,BSTACK_3,#5 _copy_elem_5_lp: - str r8,[r10],#4 - subs r3,r3,#1 + str ASTACK_2,[HEAP_PTR],#4 + subs BSTACK_1,BSTACK_1,#1 bcs _copy_elem_5_lp - add r10,r10,r2 + add HEAP_PTR,HEAP_PTR,BSTACK_2 _st_fillr5_array: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bcs _fillr5_array ldr pc,[sp],#4 create_arrayB: - mov r7,r3 - add r3,r3,#3 - lsr r3,r3,#2 + mov ASTACK_1,BSTACK_1 + add BSTACK_1,BSTACK_1,#3 + lsr BSTACK_1,BSTACK_1,#2 - add r12,r3,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_1,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4575 - str r7,[sp,#-4]! + str ASTACK_1,[sp,#-4]! bl collect_0 - ldr r7,[sp],#4 + ldr ASTACK_1,[sp],#4 no_collect_4575: - orr r4,r4,r4,lsl #8 - orr r4,r4,r4,lsl #16 - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,6 - otoa r12,__ARRAY___o_2,6 - str r12,[r10] - str r7,[r10,#4] - laol r12,BOOL+2,BOOL_o_2,3 - otoa r12,BOOL_o_2,3 - str r12,[r10,#8] - add r10,r10,#12 + orr BSTACK_0,BSTACK_0,BSTACK_0,lsl #8 + orr BSTACK_0,BSTACK_0,BSTACK_0,lsl #16 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,6 + otoa SCRATCH_REG,__ARRAY___o_2,6 + str SCRATCH_REG,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] + laol SCRATCH_REG,BOOL+2,BOOL_o_2,3 + otoa SCRATCH_REG,BOOL_o_2,3 + str SCRATCH_REG,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 b create_arrayBCI create_arrayC: - mov r7,r3 - add r3,r3,#3 - lsr r3,r3,#2 + mov ASTACK_1,BSTACK_1 + add BSTACK_1,BSTACK_1,#3 + lsr BSTACK_1,BSTACK_1,#2 - add r12,r3,#2 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_1,#2 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4578 - str r7,[sp,#-4]! + str ASTACK_1,[sp,#-4]! bl collect_0 - ldr r7,[sp],#4 + ldr ASTACK_1,[sp],#4 no_collect_4578: - orr r4,r4,r4,lsl #8 - orr r4,r4,r4,lsl #16 - mov r6,r10 - laol r12,__STRING__+2,__STRING___o_2,6 - otoa r12,__STRING___o_2,6 - str r12,[r10] - str r7,[r10,#4] - add r10,r10,#8 + orr BSTACK_0,BSTACK_0,BSTACK_0,lsl #8 + orr BSTACK_0,BSTACK_0,BSTACK_0,lsl #16 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__STRING__+2,__STRING___o_2,6 + otoa SCRATCH_REG,__STRING___o_2,6 + str SCRATCH_REG,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 b create_arrayBCI create_arrayI: - add r12,r3,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_1,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4577 bl collect_0 no_collect_4577: - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,7 - otoa r12,__ARRAY___o_2,7 - str r12,[r10] - str r3,[r10,#4] - laol r12,INT+2,INT_o_2,5 - otoa r12,INT_o_2,5 - str r12,[r10,#8] - add r10,r10,#12 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,7 + otoa SCRATCH_REG,__ARRAY___o_2,7 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_1,[HEAP_PTR,#4] + laol SCRATCH_REG,INT+2,INT_o_2,5 + otoa SCRATCH_REG,INT_o_2,5 + str SCRATCH_REG,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 create_arrayBCI: - tst r3,#1 - lsr r3,r3,#1 + tst BSTACK_1,#1 + lsr BSTACK_1,BSTACK_1,#1 beq st_filli_array - str r4,[r10],#4 + str BSTACK_0,[HEAP_PTR],#4 b st_filli_array .thumb_func filli_array: - str r4,[r10] - str r4,[r10,#4] - add r10,r10,#8 + str BSTACK_0,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 .thumb_func st_filli_array: - subs r3,r3,#1 + subs BSTACK_1,BSTACK_1,#1 bcs filli_array ldr pc,[sp],#4 create_arrayR: - add r12,r4,r4 - add r12,r12,#3+1 + add SCRATCH_REG,BSTACK_0,BSTACK_0 + add SCRATCH_REG,SCRATCH_REG,#3+1 - vmov r3,r7,d0 + vmov BSTACK_1,ASTACK_1,d0 - subs r5,r5,r12 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4579 - str r7,[sp,#-4]! + str ASTACK_1,[sp,#-4]! bl collect_0 - ldr r7,[sp],#4 + ldr ASTACK_1,[sp],#4 no_collect_4579: - tst r10,#4 - orr r10,r10,#4 + tst HEAP_PTR,#4 + orr HEAP_PTR,HEAP_PTR,#4 it ne - addne r5,r5,#1 - - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,8 - otoa r12,__ARRAY___o_2,8 - str r12,[r10] - str r4,[r10,#4] - laol r12,REAL+2,REAL_o_2,4 - otoa r12,REAL_o_2,4 - str r12,[r10,#8] - add r10,r10,#12 + addne HEAP_FREE,HEAP_FREE,#1 + + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,8 + otoa SCRATCH_REG,__ARRAY___o_2,8 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + laol SCRATCH_REG,REAL+2,REAL_o_2,4 + otoa SCRATCH_REG,REAL_o_2,4 + str SCRATCH_REG,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 b st_fillr_array .thumb_func fillr_array: - str r3,[r10] - str r7,[r10,#4] - add r10,r10,#8 + str BSTACK_1,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 .thumb_func st_fillr_array: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bcs fillr_array ldr pc,[sp],#4 .thumb_func create_array: - add r12,r4,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_0,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4576 bl collect_1 no_collect_4576: - mov r3,r6 - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,9 - otoa r12,__ARRAY___o_2,9 - str r12,[r10] - str r4,[r10,#4] - mov r12,#0 - str r12,[r10,#8] - add r10,r10,#12 - mov r1,r4 - b fillr1_array - -@ in r4: number of elements, r3: element descriptor -@ r2: element size, r1: element a size -> a0: array + mov BSTACK_1,ASTACK_0 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,9 + otoa SCRATCH_REG,__ARRAY___o_2,9 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + mov SCRATCH_REG,#0 + str SCRATCH_REG,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 + mov BSTACK_3,BSTACK_0 + b fillBSTACK_3_array + +@ in BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_2: element size, BSTACK_3: element a size -> a0: array create_R_array: - cmp r2,#2 + cmp BSTACK_2,#2 blo create_R_array_1 beq create_R_array_2 - cmp r2,#4 + cmp BSTACK_2,#4 blo create_R_array_3 beq create_R_array_4 b create_R_array_5 create_R_array_1: -@ r4: number of elements, r3: element descriptor -@ r1: element a size +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_3: element a size - add r12,r4,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_0,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4581 bl collect_0 no_collect_4581: - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,10 - otoa r12,__ARRAY___o_2,10 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] - add r10,r10,#12 - - cmp r1,#0 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,10 + otoa SCRATCH_REG,__ARRAY___o_2,10 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 + + cmp BSTACK_3,#0 beq r_array_1_b - ldr r3,[r9,#-4] - b fillr1_array + ldr BSTACK_1,[ASTACK_PTR,#-4] + b fillBSTACK_3_array r_array_1_b: - ldr r3,[sp,#4] + ldr BSTACK_1,[sp,#4] -fillr1_array: - tst r4,#1 - lsr r4,r4,#1 - beq st_fillr1_array_1 +fillBSTACK_3_array: + tst BSTACK_0,#1 + lsr BSTACK_0,BSTACK_0,#1 + beq st_fillBSTACK_3_array_1 - str r3,[r10],#4 - b st_fillr1_array_1 + str BSTACK_1,[HEAP_PTR],#4 + b st_fillBSTACK_3_array_1 -fillr1_array_lp: - str r3,[r10] - str r3,[r10,#4] - add r10,r10,#8 -st_fillr1_array_1: - subs r4,r4,#1 - bcs fillr1_array_lp +fillBSTACK_3_array_lp: + str BSTACK_1,[HEAP_PTR] + str BSTACK_1,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 +st_fillBSTACK_3_array_1: + subs BSTACK_0,BSTACK_0,#1 + bcs fillBSTACK_3_array_lp ldr pc,[sp],#4 create_R_array_2: -@ r4: number of elements, r3: element descriptor -@ r1: element a size +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_3: element a size - add r12,r4,r4 - add r12,r12,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_0,BSTACK_0 + add SCRATCH_REG,SCRATCH_REG,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4582 bl collect_0 no_collect_4582: - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,11 - otoa r12,__ARRAY___o_2,11 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] - add r10,r10,#12 - - subs r1,r1,#1 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,11 + otoa SCRATCH_REG,__ARRAY___o_2,11 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 + + subs BSTACK_3,BSTACK_3,#1 blo r_array_2_bb beq r_array_2_ab r_array_2_aa: - ldr r3,[r9,#-4] - ldr r8,[r9,#-8] - b st_fillr2_array + ldr BSTACK_1,[ASTACK_PTR,#-4] + ldr ASTACK_2,[ASTACK_PTR,#-8] + b st_fillBSTACK_2_array r_array_2_ab: - ldr r3,[r9,#-4] - ldr r8,[sp,#4] - b st_fillr2_array + ldr BSTACK_1,[ASTACK_PTR,#-4] + ldr ASTACK_2,[sp,#4] + b st_fillBSTACK_2_array r_array_2_bb: - ldr r3,[sp,#4] - ldr r8,[sp,#8] - b st_fillr2_array - -fillr2_array_1: - str r3,[r10] - str r8,[r10,#4] - add r10,r10,#8 -st_fillr2_array: - subs r4,r4,#1 - bcs fillr2_array_1 + ldr BSTACK_1,[sp,#4] + ldr ASTACK_2,[sp,#8] + b st_fillBSTACK_2_array + +fillBSTACK_2_array_1: + str BSTACK_1,[HEAP_PTR] + str ASTACK_2,[HEAP_PTR,#4] + add HEAP_PTR,HEAP_PTR,#8 +st_fillBSTACK_2_array: + subs BSTACK_0,BSTACK_0,#1 + bcs fillBSTACK_2_array_1 ldr pc,[sp],#4 create_R_array_3: -@ r4: number of elements, r3: element descriptor -@ r1: element a size +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_3: element a size - add r12,r4,r4,lsl #1 - add r12,r12,#3 - subs r5,r5,r12 + add SCRATCH_REG,BSTACK_0,BSTACK_0,lsl #1 + add SCRATCH_REG,SCRATCH_REG,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4583 bl collect_0 no_collect_4583: - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,12 - otoa r12,__ARRAY___o_2,12 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] - add r10,r10,#12 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,12 + otoa SCRATCH_REG,__ARRAY___o_2,12 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 ldr lr,[sp],#4 - mov r2,sp + mov BSTACK_2,sp - cmp r1,#0 + cmp BSTACK_3,#0 beq r_array_3 - sub r8,r9,r1,lsl #2 - subs r1,r1,#1 + sub ASTACK_2,ASTACK_PTR,BSTACK_3,lsl #2 + subs BSTACK_3,BSTACK_3,#1 copy_a_to_b_lp3: - ldr r12,[r8],#4 - str r12,[sp,#-4]! - subs r1,r1,#1 + ldr SCRATCH_REG,[ASTACK_2],#4 + str SCRATCH_REG,[sp,#-4]! + subs BSTACK_3,BSTACK_3,#1 bcs copy_a_to_b_lp3 r_array_3: - ldr r3,[sp] - ldr r7,[sp,#4] - ldr r8,[sp,#8] - - mov sp,r2 - b st_fillr3_array - -fillr3_array_1: - str r3,[r10] - str r7,[r10,#4] - str r8,[r10,#8] - add r10,r10,#12 -st_fillr3_array: - subs r4,r4,#1 - bcs fillr3_array_1 + ldr BSTACK_1,[sp] + ldr ASTACK_1,[sp,#4] + ldr ASTACK_2,[sp,#8] + + mov sp,BSTACK_2 + b st_fillBSTACK_1_array + +fillBSTACK_1_array_1: + str BSTACK_1,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] + str ASTACK_2,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 +st_fillBSTACK_1_array: + subs BSTACK_0,BSTACK_0,#1 + bcs fillBSTACK_1_array_1 bx lr create_R_array_4: -@ r4: number of elements, r3: element descriptor -@ r1: element a size +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_3: element a size - lsl r12,r4,#2 - add r12,r12,#3 - subs r5,r5,r12 + lsl SCRATCH_REG,BSTACK_0,#2 + add SCRATCH_REG,SCRATCH_REG,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4584 bl collect_0 no_collect_4584: - mov r6,r10 - laol r12,__ARRAY__+2,__ARRAY___o_2,13 - otoa r12,__ARRAY___o_2,13 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] - add r10,r10,#12 + mov ASTACK_0,HEAP_PTR + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,13 + otoa SCRATCH_REG,__ARRAY___o_2,13 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] + add HEAP_PTR,HEAP_PTR,#12 ldr lr,[sp],#4 - mov r2,sp + mov BSTACK_2,sp - cmp r1,#0 + cmp BSTACK_3,#0 beq r_array_4 - sub r8,r9,r1,lsl #2 - subs r1,r1,#1 + sub ASTACK_2,ASTACK_PTR,BSTACK_3,lsl #2 + subs BSTACK_3,BSTACK_3,#1 copy_a_to_b_lp4: - ldr r12,[r8],#4 - str r12,[sp,#-4]! - subs r1,r1,#1 + ldr SCRATCH_REG,[ASTACK_2],#4 + str SCRATCH_REG,[sp,#-4]! + subs BSTACK_3,BSTACK_3,#1 bcs copy_a_to_b_lp4 r_array_4: - ldr r0,[sp] - ldr r3,[sp,#4] - ldr r7,[sp,#8] - ldr r8,[sp,#12] - - mov sp,r2 - b st_fillr4_array - -fillr4_array: - str r0,[r10] - str r3,[r10,#4] - str r7,[r10,#8] - str r8,[r10,#12] - add r10,r10,#16 -st_fillr4_array: - subs r4,r4,#1 - bcs fillr4_array + ldr BSTACK_4,[sp] + ldr BSTACK_1,[sp,#4] + ldr ASTACK_1,[sp,#8] + ldr ASTACK_2,[sp,#12] + + mov sp,BSTACK_2 + b st_fillBSTACK_0_array + +fillBSTACK_0_array: + str BSTACK_4,[HEAP_PTR] + str BSTACK_1,[HEAP_PTR,#4] + str ASTACK_1,[HEAP_PTR,#8] + str ASTACK_2,[HEAP_PTR,#12] + add HEAP_PTR,HEAP_PTR,#16 +st_fillBSTACK_0_array: + subs BSTACK_0,BSTACK_0,#1 + bcs fillBSTACK_0_array bx lr create_R_array_5: -@ r4: number of elements, r3: element descriptor -@ r1: element a size, r2: element size +@ BSTACK_0: number of elements, BSTACK_1: element descriptor +@ BSTACK_3: element a size, BSTACK_2: element size - mul r12,r4,r2 - add r12,r12,#3 - subs r5,r5,r12 + mul SCRATCH_REG,BSTACK_0,BSTACK_2 + add SCRATCH_REG,SCRATCH_REG,#3 + subs HEAP_FREE,HEAP_FREE,SCRATCH_REG bhs no_collect_4585 bl collect_0 no_collect_4585: - laol r12,__ARRAY__+2,__ARRAY___o_2,14 - otoa r12,__ARRAY___o_2,14 - str r12,[r10] - str r4,[r10,#4] - str r3,[r10,#8] + laol SCRATCH_REG,__ARRAY__+2,__ARRAY___o_2,14 + otoa SCRATCH_REG,__ARRAY___o_2,14 + str SCRATCH_REG,[HEAP_PTR] + str BSTACK_0,[HEAP_PTR,#4] + str BSTACK_1,[HEAP_PTR,#8] ldr lr,[sp],#4 - mov r11,sp + mov ASTACK_3,sp - cmp r1,#0 + cmp BSTACK_3,#0 beq r_array_5 - sub r8,r9,r1,lsl #2 - subs r1,r1,#1 + sub ASTACK_2,ASTACK_PTR,BSTACK_3,lsl #2 + subs BSTACK_3,BSTACK_3,#1 copy_a_to_b_lp5: - ldr r12,[r8],#4 - str r12,[sp,#-4]! - subs r1,r1,#1 + ldr SCRATCH_REG,[ASTACK_2],#4 + str SCRATCH_REG,[sp,#-4]! + subs BSTACK_3,BSTACK_3,#1 bcs copy_a_to_b_lp5 r_array_5: - mov r6,r10 - add r10,r10,#12 + mov ASTACK_0,HEAP_PTR + add HEAP_PTR,HEAP_PTR,#12 - ldr r3,[sp] - ldr r7,[sp,#4] + ldr BSTACK_1,[sp] + ldr ASTACK_1,[sp,#4] b st_fillr5_array fillr5_array_1: - str r3,[r10] - str r7,[r10,#4] + str BSTACK_1,[HEAP_PTR] + str ASTACK_1,[HEAP_PTR,#4] - sub r12,r2,#5 + sub SCRATCH_REG,BSTACK_2,#5 - ldr r8,[sp,#8] - str r8,[r10,#8] + ldr ASTACK_2,[sp,#8] + str ASTACK_2,[HEAP_PTR,#8] - ldr r8,[sp,#12] - add r0,sp,#16 - str r8,[r10,#12] - add r10,r10,#16 + ldr ASTACK_2,[sp,#12] + add BSTACK_4,sp,#16 + str ASTACK_2,[HEAP_PTR,#12] + add HEAP_PTR,HEAP_PTR,#16 copy_elem_lp5: - ldr r8,[r0],#4 - str r8,[r10],#4 - subs r12,r12,#1 + ldr ASTACK_2,[BSTACK_4],#4 + str ASTACK_2,[HEAP_PTR],#4 + subs SCRATCH_REG,SCRATCH_REG,#1 bcs copy_elem_lp5 st_fillr5_array: - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 bcs fillr5_array_1 - mov sp,r11 + mov sp,ASTACK_3 bx lr .thumb_func repl_args_b: - cmp r4,#0 + cmp BSTACK_0,#0 ble repl_args_b_1 - subs r4,r4,#1 + subs BSTACK_0,BSTACK_0,#1 beq repl_args_b_4 - ldr r7,[r6,#8] - subs r3,r3,#2 + ldr ASTACK_1,[ASTACK_0,#8] + subs BSTACK_1,BSTACK_1,#2 bne repl_args_b_2 - str r7,[r9],#4 + str ASTACK_1,[ASTACK_PTR],#4 b repl_args_b_4 repl_args_b_2: - add r7,r7,r4,lsl #2 + add ASTACK_1,ASTACK_1,BSTACK_0,lsl #2 repl_args_b_3: - ldr r8,[r7,#-4]! - str r8,[r9],#4 - subs r4,r4,#1 + ldr ASTACK_2,[ASTACK_1,#-4]! + str ASTACK_2,[ASTACK_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bne repl_args_b_3 repl_args_b_4: - ldr r8,[r6,#4] - str r8,[r9],#4 + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_PTR],#4 repl_args_b_1: ldr pc,[sp],#4 .thumb_func push_arg_b: - cmp r3,#2 + cmp BSTACK_1,#2 blo push_arg_b_1 bne push_arg_b_2 - cmp r3,r4 + cmp BSTACK_1,BSTACK_0 beq push_arg_b_1 push_arg_b_2: - ldr r6,[r6,#8] - subs r3,r3,#2 + ldr ASTACK_0,[ASTACK_0,#8] + subs BSTACK_1,BSTACK_1,#2 push_arg_b_1: - ldr r6,[r6,r3,lsl #2] + ldr ASTACK_0,[ASTACK_0,BSTACK_1,lsl #2] ldr pc,[sp],#4 .thumb_func del_args: - ldr r3,[r6] - subs r3,r3,r4 - ldrsh r4,[r3,#-2] - subs r4,r4,#2 + ldr BSTACK_1,[ASTACK_0] + subs BSTACK_1,BSTACK_1,BSTACK_0 + ldrsh BSTACK_0,[BSTACK_1,#-2] + subs BSTACK_0,BSTACK_0,#2 bge del_args_2 - str r3,[r7] - ldr r8,[r6,#4] - str r8,[r7,#4] - ldr r8,[r6,#8] - str r8,[r7,#8] + str BSTACK_1,[ASTACK_1] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_1,#4] + ldr ASTACK_2,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_1,#8] ldr pc,[sp],#4 del_args_2: bne del_args_3 - str r3,[r7] - ldr r8,[r6,#4] - str r8,[r7,#4] - ldr r8,[r6,#8] - ldr r8,[r8] - str r8,[r7,#8] + str BSTACK_1,[ASTACK_1] + ldr ASTACK_2,[ASTACK_0,#4] + str ASTACK_2,[ASTACK_1,#4] + ldr ASTACK_2,[ASTACK_0,#8] + ldr ASTACK_2,[ASTACK_2] + str ASTACK_2,[ASTACK_1,#8] ldr pc,[sp],#4 del_args_3: - subs r5,r5,r4 + subs HEAP_FREE,HEAP_FREE,BSTACK_0 blo del_args_gc .thumb_func del_args_r_gc: - str r3,[r7] - str r10,[r7,#8] - ldr r8,[r6,#4] - ldr r6,[r6,#8] - str r8,[r7,#4] + str BSTACK_1,[ASTACK_1] + str HEAP_PTR,[ASTACK_1,#8] + ldr ASTACK_2,[ASTACK_0,#4] + ldr ASTACK_0,[ASTACK_0,#8] + str ASTACK_2,[ASTACK_1,#4] .thumb_func del_args_copy_args: - ldr r8,[r6],#4 - str r8,[r10],#4 - subs r4,r4,#1 + ldr ASTACK_2,[ASTACK_0],#4 + str ASTACK_2,[HEAP_PTR],#4 + subs BSTACK_0,BSTACK_0,#1 bgt del_args_copy_args ldr pc,[sp],#4 @@ -5116,11 +5109,11 @@ del_args_gc: .thumb_func sin_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl sin .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5128,11 +5121,11 @@ sin_real: .thumb_func cos_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl cos .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5140,11 +5133,11 @@ cos_real: .thumb_func tan_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl tan .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5152,11 +5145,11 @@ tan_real: .thumb_func asin_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl asin .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5164,11 +5157,11 @@ asin_real: .thumb_func acos_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl acos .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5176,11 +5169,11 @@ acos_real: .thumb_func atan_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl atan .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5188,22 +5181,22 @@ atan_real: .thumb_func ln_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl log .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 .section .text.log10_real,"ax" log10_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl log10 .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5211,11 +5204,11 @@ log10_real: .thumb_func exp_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl exp .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5223,8 +5216,8 @@ exp_real: .thumb_func pow_real: .ifdef SOFT_FP_CC - vmov r0,r1,d1 - vmov r2,r3,d0 + vmov BSTACK_4,BSTACK_3,d1 + vmov BSTACK_2,BSTACK_1,d0 .else vmov.f64 d2,d0 vmov.f64 d0,d1 @@ -5232,7 +5225,7 @@ pow_real: .endif bl pow .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif ldr pc,[sp],#4 @@ -5240,17 +5233,17 @@ pow_real: .thumb_func entier_real: .ifdef SOFT_FP_CC - vmov r0,r1,d0 + vmov BSTACK_4,BSTACK_3,d0 .endif bl floor .ifdef SOFT_FP_CC - vmov d0,r0,r1 + vmov d0,BSTACK_4,BSTACK_3 .endif .thumb_func r_to_i_real: vcvtr.s32.f64 s0,d0 - vmov r4,s0 + vmov BSTACK_0,s0 ldr pc,[sp],#4 .text -- cgit v1.2.3