From 0f7f68df4aab8b32ebd701695850f2eafa4749a0 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sun, 2 Oct 2016 12:10:25 +0000 Subject: Fix storing the program counter as with 5effb5b in clean-code-generator --- thumb2ap.s | 168 ++++++++++-------- thumb2compact.s | 12 +- thumb2compact_rmark.s | 14 +- thumb2compact_rmarkr.s | 2 +- thumb2divmod.s | 24 ++- thumb2fileIO3.s | 128 ++++++++++---- thumb2mark.s | 22 +-- thumb2startup.s | 464 +++++++++++++++++++++++++++++++++---------------- 8 files changed, 552 insertions(+), 282 deletions(-) diff --git a/thumb2ap.s b/thumb2ap.s index 8127222..16343ab 100644 --- a/thumb2ap.s +++ b/thumb2ap.s @@ -600,7 +600,7 @@ repl_args_5: no_fast_ap32: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -615,7 +615,7 @@ no_fast_ap32: no_fast_ap31: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -630,7 +630,7 @@ no_fast_ap31: no_fast_ap30: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -645,7 +645,7 @@ no_fast_ap30: no_fast_ap29: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -660,7 +660,7 @@ no_fast_ap29: no_fast_ap28: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -675,7 +675,7 @@ no_fast_ap28: no_fast_ap27: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -690,7 +690,7 @@ no_fast_ap27: no_fast_ap26: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -705,7 +705,7 @@ no_fast_ap26: no_fast_ap25: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -720,7 +720,7 @@ no_fast_ap25: no_fast_ap24: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -735,7 +735,7 @@ no_fast_ap24: no_fast_ap23: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -750,7 +750,7 @@ no_fast_ap23: no_fast_ap22: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -765,7 +765,7 @@ no_fast_ap22: no_fast_ap21: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -780,7 +780,7 @@ no_fast_ap21: no_fast_ap20: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -795,7 +795,7 @@ no_fast_ap20: no_fast_ap19: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -810,7 +810,7 @@ no_fast_ap19: no_fast_ap18: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -825,7 +825,7 @@ no_fast_ap18: no_fast_ap17: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -840,7 +840,7 @@ no_fast_ap17: no_fast_ap16: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -855,7 +855,7 @@ no_fast_ap16: no_fast_ap15: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -870,7 +870,7 @@ no_fast_ap15: no_fast_ap14: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -885,7 +885,7 @@ no_fast_ap14: no_fast_ap13: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -900,7 +900,7 @@ no_fast_ap13: no_fast_ap12: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -915,7 +915,7 @@ no_fast_ap12: no_fast_ap11: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -930,7 +930,7 @@ no_fast_ap11: no_fast_ap10: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -945,7 +945,7 @@ no_fast_ap10: no_fast_ap9: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -960,7 +960,7 @@ no_fast_ap9: no_fast_ap8: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -975,7 +975,7 @@ no_fast_ap8: no_fast_ap7: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -990,7 +990,7 @@ no_fast_ap7: no_fast_ap6: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -1005,7 +1005,7 @@ no_fast_ap6: no_fast_ap5: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -1020,7 +1020,7 @@ no_fast_ap5: no_fast_ap4: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -1035,7 +1035,7 @@ no_fast_ap4: no_fast_ap3: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r11,[r6] @@ -1050,7 +1050,7 @@ no_fast_ap3: no_fast_ap2: ldr r12,[r11,#2] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 ldr r8,[r6] @@ -1459,7 +1459,9 @@ yet_args_needed_0_gc_r: mov r6,r10 add r4,r4,#8 str r4,[r10],#8 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr yet_args_needed_0_gc: bl collect_2 @@ -1485,7 +1487,9 @@ yet_args_needed_1_gc_r: ldr r3,[r7,#4] str r3,[r10,#4] add r10,r10,#12 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr yet_args_needed_1_gc: bl collect_2 @@ -1499,7 +1503,9 @@ build_node_2_gc_r: str r6,[r10,#8] mov r6,r10 add r10,r10,#12 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr build_node_2_gc: bl collect_2 @@ -1528,7 +1534,9 @@ gc_r_22: str r8,[r10] str r10,[r10,#16] add r10,r10,#20 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_22: bl collect_2 b gc_r_22 @@ -1546,7 +1554,9 @@ build_node_3_gc_r: subs r9,r9,#4 str r8,[r10,#16] add r10,r10,#20 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr build_node_3_gc: bl collect_2 @@ -1578,7 +1588,9 @@ gc_r_23: add r6,r10,#12 str r8,[r10,#4] add r10,r10,#24 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_23: bl collect_2 b gc_r_23 @@ -1598,7 +1610,9 @@ build_node_4_gc_r: subs r9,r9,#8 str r8,[r10,#20] add r10,r10,#24 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr build_node_4_gc: bl collect_2 @@ -1632,7 +1646,9 @@ gc_r_24: ldr r8,[r7,#8] str r8,[r10,#8] add r10,r10,#28 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_24: bl collect_2 b gc_r_24 @@ -1654,7 +1670,9 @@ build_node_5_gc_r: subs r9,r9,#12 str r8,[r10,#24] add r10,r10,#28 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr build_node_5_gc: bl collect_2 @@ -2025,7 +2043,9 @@ yet_args_needed_cp_a: str r3,[r10,#8] str r8,[r10,#12] add r10,r10,#16 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr yet_args_needed_gc: bl collect_2 @@ -2057,7 +2077,9 @@ build_node_cp_a: subs r4,r4,#1 bne build_node_cp_a - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr build_node_gc: bl collect_2 @@ -2243,7 +2265,7 @@ apupd_7: ldr r8,[r9,#-28] ldr r4,[r9,#-32] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_8 lao r12,e__system__nind,29 @@ -2264,7 +2286,7 @@ apupd_8: ldr r8,[r9,#-32] ldr r4,[r9,#-36] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_9 lao r12,e__system__nind,30 @@ -2285,7 +2307,7 @@ apupd_9: ldr r8,[r9,#-36] ldr r4,[r9,#-40] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_10 lao r12,e__system__nind,31 @@ -2306,7 +2328,7 @@ apupd_10: ldr r8,[r9,#-40] ldr r4,[r9,#-44] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_11 lao r12,e__system__nind,32 @@ -2327,7 +2349,7 @@ apupd_11: ldr r8,[r9,#-44] ldr r4,[r9,#-48] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_12 lao r12,e__system__nind,33 @@ -2348,7 +2370,7 @@ apupd_12: ldr r8,[r9,#-48] ldr r4,[r9,#-52] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_13 lao r12,e__system__nind,34 @@ -2369,7 +2391,7 @@ apupd_13: ldr r8,[r9,#-52] ldr r4,[r9,#-56] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_14 lao r12,e__system__nind,35 @@ -2390,7 +2412,7 @@ apupd_14: ldr r8,[r9,#-56] ldr r4,[r9,#-60] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_15 lao r12,e__system__nind,36 @@ -2411,7 +2433,7 @@ apupd_15: ldr r8,[r9,#-60] ldr r4,[r9,#-64] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_16 lao r12,e__system__nind,37 @@ -2432,7 +2454,7 @@ apupd_16: ldr r8,[r9,#-64] ldr r4,[r9,#-68] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_17 lao r12,e__system__nind,38 @@ -2453,7 +2475,7 @@ apupd_17: ldr r8,[r9,#-68] ldr r4,[r9,#-72] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_18 lao r12,e__system__nind,39 @@ -2474,7 +2496,7 @@ apupd_18: ldr r8,[r9,#-72] ldr r4,[r9,#-76] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_19 lao r12,e__system__nind,40 @@ -2495,7 +2517,7 @@ apupd_19: ldr r8,[r9,#-76] ldr r4,[r9,#-80] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_20 lao r12,e__system__nind,41 @@ -2516,7 +2538,7 @@ apupd_20: ldr r8,[r9,#-80] ldr r4,[r9,#-84] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_21 lao r12,e__system__nind,42 @@ -2537,7 +2559,7 @@ apupd_21: ldr r8,[r9,#-84] ldr r4,[r9,#-88] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_22 lao r12,e__system__nind,43 @@ -2558,7 +2580,7 @@ apupd_22: ldr r8,[r9,#-88] ldr r4,[r9,#-92] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_23 lao r12,e__system__nind,44 @@ -2579,7 +2601,7 @@ apupd_23: ldr r8,[r9,#-92] ldr r4,[r9,#-96] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_24 lao r12,e__system__nind,45 @@ -2600,7 +2622,7 @@ apupd_24: ldr r8,[r9,#-96] ldr r4,[r9,#-100] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_25 lao r12,e__system__nind,46 @@ -2621,7 +2643,7 @@ apupd_25: ldr r8,[r9,#-100] ldr r4,[r9,#-104] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_26 lao r12,e__system__nind,47 @@ -2642,7 +2664,7 @@ apupd_26: ldr r8,[r9,#-104] ldr r4,[r9,#-108] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_27 lao r12,e__system__nind,48 @@ -2663,7 +2685,7 @@ apupd_27: ldr r8,[r9,#-108] ldr r4,[r9,#-112] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_28 lao r12,e__system__nind,49 @@ -2684,7 +2706,7 @@ apupd_28: ldr r8,[r9,#-112] ldr r4,[r9,#-116] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_29 lao r12,e__system__nind,50 @@ -2705,7 +2727,7 @@ apupd_29: ldr r8,[r9,#-116] ldr r4,[r9,#-120] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_30 lao r12,e__system__nind,51 @@ -2726,7 +2748,7 @@ apupd_30: ldr r8,[r9,#-120] ldr r4,[r9,#-124] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_31 lao r12,e__system__nind,52 @@ -2747,7 +2769,7 @@ apupd_31: ldr r8,[r9,#-124] ldr r4,[r9,#-128] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_32 lao r12,e__system__nind,53 @@ -2768,7 +2790,7 @@ apupd_32: ldr r8,[r9,#-128] ldr r4,[r9,#-132] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl move_33 lao r12,e__system__nind,54 @@ -2815,7 +2837,7 @@ ap_32__u0: add r8,r8,pc .endif .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r8 apupd_upd: @@ -2828,7 +2850,9 @@ apupd_upd: ldr r4,[r6,#8] mov r6,r7 str r4,[r7,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr move_33: ldr r3,[r9,#-124] @@ -2919,7 +2943,9 @@ move_7: str r3,[r9,#-12] ldr r3,[r9,#-4] str r3,[r9,#-8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .ifdef PIC lto apupd_upd,0 diff --git a/thumb2compact.s b/thumb2compact.s index 33a214e..0e0bd7b 100644 --- a/thumb2compact.s +++ b/thumb2compact.s @@ -47,7 +47,7 @@ mark_cafs_lp: sto r6,r12,end_vector,13 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! .if COMPACT_MARK_WITH_STACK bl rmark_stack_nodes @@ -74,7 +74,7 @@ end_mark_cafs: lao r12,end_vector,14 sto r6,r12,end_vector,14 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! .if COMPACT_MARK_WITH_STACK bl rmark_stack_nodes @@ -84,7 +84,7 @@ end_mark_cafs: .ifdef MEASURE_GC .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_mark_compact_garbage_collect_time .endif @@ -228,12 +228,12 @@ finalizer_list_empty: sto r6,r12,end_vector,15 .if COMPACT_MARK_WITH_STACK .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl rmark_stack_nodes .else .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl mark_stack_nodes .endif @@ -989,7 +989,7 @@ move_array_ab: subs r4,r4,r3 add r7,r7,r6 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl reorder diff --git a/thumb2compact_rmark.s b/thumb2compact_rmark.s index 6dc8107..e67557c 100644 --- a/thumb2compact_rmark.s +++ b/thumb2compact_rmark.s @@ -36,7 +36,7 @@ rmark_more_stack_nodes: ldr r4,[r6] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl rmark_stack_node @@ -45,7 +45,9 @@ rmark_more_stack_nodes: ldo r12,r12,end_vector,17 cmp r9,r12 bne rmark_more_stack_nodes - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr rmark_stack_node: subs sp,sp,#8 @@ -695,7 +697,9 @@ rmark_next_node: rmark_next_node_: end_rmark_nodes: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr rmark_lazy_node: ldr r8,[r4,#-4] @@ -859,7 +863,7 @@ rmark_ab_record_array: add r6,r6,#4 add r7,r7,r6 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl reorder @@ -966,7 +970,7 @@ rmark_array_nodes: ldr r4,[r6] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl rmark_array_node diff --git a/thumb2compact_rmarkr.s b/thumb2compact_rmarkr.s index d684e3f..a1247e6 100644 --- a/thumb2compact_rmarkr.s +++ b/thumb2compact_rmarkr.s @@ -727,7 +727,7 @@ rmarkr_ab_record_array: add r6,r6,#4 add r7,r7,r6 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl reorder diff --git a/thumb2divmod.s b/thumb2divmod.s index 3343db6..ec35a2b 100644 --- a/thumb2divmod.s +++ b/thumb2divmod.s @@ -48,7 +48,9 @@ divide: cmp r12,#0 it lt neglt r4,r4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func divide_large_result: @@ -64,11 +66,15 @@ divide_large_result: cmp r12,#0 it lt neglt r4,r4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr divide_result_0: mov r4,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func divide_by_small_number: @@ -84,7 +90,9 @@ divide_by_small_number: cmp r12,#0 it lt neglt r4,r4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .globl modulo .thumb_func @@ -138,7 +146,9 @@ modulo_divide_result_0: cmp r12,#0 it lt neglt r4,r4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func modulo_of_small_number: @@ -159,7 +169,9 @@ modulo_from_quotient: cmp r12,#0 it lt neglt r4,r4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func div_mod_table: diff --git a/thumb2fileIO3.s b/thumb2fileIO3.s index da498ae..9981e61 100644 --- a/thumb2fileIO3.s +++ b/thumb2fileIO3.s @@ -99,7 +99,9 @@ stdioF: mov r3,r0 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 0 @ jsr stderrF @@ -114,7 +116,9 @@ stderrF: mov r3,r0 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 1 1 i @ jsr openF @@ -136,7 +140,9 @@ openF: movmi r2,#0 it pl movpl r2,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr closeF @@ -150,7 +156,9 @@ closeF: bl close_file mov sp,r4 mov r4,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 3 f i @ jsr reopenF @@ -169,7 +177,9 @@ reopenF: neg r2,r0 mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readFC @@ -191,12 +201,16 @@ readFC: mov r2,r0 mov r1,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readFC_eof: mov r2,#0 mov r3,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readFI @@ -218,7 +232,9 @@ readFI: mov r3,r6 mov r4,#-1 neg r1,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readFR @@ -238,7 +254,9 @@ readFR: mov r3,r6 mov r4,#-1 neg r2,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 3 f i @ jsr readFS @@ -272,7 +290,9 @@ readFS_end: add r10,r10,r2 sub r5,r5,r2,lsr #2 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readFS_gc: mov r5,r1 @@ -311,7 +331,9 @@ readFString: ldr r2,[sp],#4 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readFString_error: lao r8,freadstring_error,0 @@ -411,7 +433,9 @@ st_copy_string1: add r12,r4,#8+3 sub r5,r5,r12,lsr #2 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readLineF_gc: mov r5,r2 @@ -436,7 +460,9 @@ writeFC: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 3 i f @ jsr writeFI @@ -455,7 +481,9 @@ writeFI: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 4 r f @ jsr writeFR @@ -473,7 +501,9 @@ writeFR: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 1 2 f @ jsr writeFS @@ -493,7 +523,9 @@ writeFS: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 1 4 i i f @ jsr writeFString @@ -522,7 +554,9 @@ writeFString: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr writeFString_error: lao r8,fwritestring_error,0 @@ -546,7 +580,9 @@ endF: neg r2,r0 mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr errorF @@ -565,7 +601,9 @@ errorF: neg r2,r0 mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr positionF @@ -584,7 +622,9 @@ positionF: mov r2,r0 mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 4 f i i @ jsr seekF @@ -605,7 +645,9 @@ seekF: neg r2,r0 mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr shareF @@ -623,7 +665,9 @@ shareF: mov r3,r6 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 1 1 i @ jsr openSF @@ -648,7 +692,9 @@ openSF: mov r3,r6 mov r4,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readSFC @@ -674,12 +720,16 @@ readSFC: beq readSFC_eof mov r1,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readSFC_eof: mov r2,#0 mov r1,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readSFI @@ -703,7 +753,9 @@ readSFI: ldr r2,[sp],#4 mov r3,r6 ldr r4,[sp],#4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr readSFR @@ -727,7 +779,9 @@ readSFR: mov r3,r6 ldr r4,[sp],#4 neg r2,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 3 f i @ jsr readSFS @@ -764,7 +818,9 @@ readSFS_end: and r2,r2,#-4 add r10,r10,r2 sub r5,r5,r2,lsr #2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readSFS_gc: mov r5,r2 @@ -871,7 +927,9 @@ st_copy_string2: add r10,r10,r12 add r12,r2,#8+3 sub r5,r5,r12,lsr #2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr readLineSF_gc: mov r5,r2 @@ -894,7 +952,9 @@ endSF: mov sp,r4 neg r4,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 2 f @ jsr positionSF @@ -911,7 +971,9 @@ positionSF: mov sp,r4 mov r4,r0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ .d 0 4 f i i @ jsr seekSF @@ -934,7 +996,9 @@ seekSF: neg r2,r0 ldr r4,[sp],#4 mov r3,r6 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .ifdef PIC lto freadstring_error,0 diff --git a/thumb2mark.s b/thumb2mark.s index a94235f..e5ff35f 100644 --- a/thumb2mark.s +++ b/thumb2mark.s @@ -53,7 +53,7 @@ _mark_cafs_lp: sto r4,r12,end_vector,0 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _mark_stack_nodes @@ -71,7 +71,7 @@ _end_mark_cafs: lao r12,end_vector,1 sto r9,r12,end_vector,1 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _mark_stack_nodes @@ -159,7 +159,7 @@ restore_lazy_array: sub r4,r4,r8 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl reorder @@ -234,7 +234,7 @@ end_finalizers_after_mark: str r2,[sp,#-4]! .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_garbage_collect_time @@ -343,7 +343,7 @@ _no_heap_use_message2: .ifdef FINALIZERS .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl call_finalizers .endif @@ -946,7 +946,9 @@ _mark_next_node: .thumb_func _end_mark_nodes: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func _mark_lazy_node: @@ -1281,7 +1283,7 @@ _mark_ab_array: lao r12,end_vector,5 sto r4,r12,end_vector,5 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _mark_stack_nodes @@ -1356,7 +1358,7 @@ _end_set_a_array_bits: lao r12,end_vector,8 sto r4,r12,end_vector,8 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _mark_stack_nodes @@ -1421,7 +1423,7 @@ _end_set_lazy_array_bits: lao r12,end_vector,11 sto r4,r12,end_vector,11 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _mark_stack_nodes @@ -2362,7 +2364,7 @@ __mark__ab__record__array: add r7,r7,r6 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl reorder diff --git a/thumb2startup.s b/thumb2startup.s index 0bf6793..b753cf1 100644 --- a/thumb2startup.s +++ b/thumb2startup.s @@ -499,14 +499,14 @@ abc_main: sto r4,r12,start_address,0 .endif .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_clean tst r4,r4 bne init_error .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_timer @@ -515,7 +515,7 @@ abc_main: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_profiler .endif @@ -524,12 +524,12 @@ abc_main: lao r12,start_address,1 ldo r4,r12,start_address,1 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r4 .else .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl __start .endif @@ -537,7 +537,7 @@ abc_main: .thumb_func exit: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl exit_clean @@ -555,14 +555,14 @@ clean_init: sto r0,r12,dll_initisialised,0 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_clean tst r4,r4 bne init_dll_error .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_timer @@ -571,7 +571,7 @@ clean_init: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl init_profiler .endif @@ -604,7 +604,7 @@ clean_fini: ldo r9,r12,saved_a_stack_p,1 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl exit_clean @@ -874,7 +874,9 @@ no_mark2: .endif mov r4,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr no_memory_2: lao r0,out_of_memory_string_1,0 @@ -884,7 +886,9 @@ no_memory_2: ? movl $1,@execution_aborted .endif mov r0,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr no_memory_3: lao r0,out_of_memory_string_1,1 @@ -899,12 +903,14 @@ no_memory_3: bl free mov r0,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func exit_clean: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx add_execute_time @@ -921,7 +927,7 @@ exit_clean: ldo r4,r12,execute_time,0 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl print_time @@ -933,7 +939,7 @@ exit_clean: ldo r4,r12,garbage_collect_time,0 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl print_time @@ -951,7 +957,7 @@ exit_clean: add r4,r12 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl print_time @@ -970,12 +976,14 @@ no_print_execution_time: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl write_profile_information .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func __driver: @@ -1138,7 +1146,9 @@ print_time: mov r0,r6 bl ew_print_text .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_sc: @@ -1154,12 +1164,14 @@ print: .thumb_func end_print: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func dump: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl print b halt @@ -1256,19 +1268,25 @@ print_record: .thumb_func end_print_symbol: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_int_node: ldr r0,[r6,#4] bl w_print_int - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_int: mov r0,r4 bl w_print_int - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_char_denotation: @@ -1287,20 +1305,26 @@ print_char_denotation: mov r0,#0x27 bl w_print_char - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_char_node: ldr r0,[r6,#4] bl w_print_char - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_char: str r4,[sp,#-4]! bl w_print_char add sp,sp,#4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_bool: @@ -1313,14 +1337,18 @@ print_true: lao r0,true_c_string,0 otoa r0,true_c_string,0 bl w_print_string - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_false: lao r0,false_c_string,0 otoa r0,false_c_string,0 bl w_print_string - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print_real: @@ -1343,13 +1371,17 @@ print_real_: mov sp,lr bl w_print_real mov sp,r11 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr print_string_a2: ldr r1,[r8] add r0,r8,#4 bl w_print_text - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func print__chars__sc: @@ -1365,7 +1397,9 @@ print__string__: bl w_print_text .thumb_func no_print_chars: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func push_a_r_args: @@ -1488,7 +1522,9 @@ push_r_a_elements: bcs push_r_a_elements_lp ldr r4,[sp],#4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr BtoAC: tst r4,r4 @@ -1496,11 +1532,15 @@ BtoAC: BtoAC_true: lao r6,true_string,0 otoa r6,true_string,0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr BtoAC_false: lao r6,false_string,0 otoa r6,false_string,0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr RtoAC: .if USE_CLIB @@ -1527,7 +1567,7 @@ ItoAC: lao r6,sprintf_buffer,2 otoa r6,sprintf_buffer,2 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl int_to_string @@ -1588,7 +1628,9 @@ reverse_digits: mov r12,#0 strb r12,[r6] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .else mov r2,r4 lao r1,printf_int_string,0 @@ -1655,7 +1697,9 @@ D_to_S_cp_str_2: bcs D_to_S_cp_str_1 mov r6,r8 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr eqD: ldr r4,[r6] ldr r12,[r7] @@ -1680,7 +1724,9 @@ eqD: ldr r4,[r6] beq eqD_REAL mov r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr eqD_CHAR: eqD_INT: @@ -1690,7 +1736,9 @@ eqD_INT: cmp r3,r12 it eq moveq r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr eqD_BOOL: ldrb r3,[r6,#4] @@ -1699,7 +1747,9 @@ eqD_BOOL: cmp r3,r12 it eq moveq r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr eqD_REAL: vldr.f64 d0,[r6,#4] @@ -1709,11 +1759,15 @@ eqD_REAL: vmrs APSR_nzcv,fpscr it eq moveq r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr eqD_false: mov r4,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ @ the timer @ @@ -1738,7 +1792,9 @@ init_timer: lao r12,IO_time,1 sto r4,r12,IO_time,1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func get_time_diff: @@ -1755,12 +1811,14 @@ get_time_diff: ldr r7,[r6] str r4,[r6] subs r4,r4,r7 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func add_execute_time: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl get_time_diff lao r6,execute_time,3 @@ -1771,12 +1829,14 @@ add_time: ldr r12,[r6] add r4,r4,r12 str r4,[r6] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func add_garbage_collect_time: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl get_time_diff lao r6,garbage_collect_time,3 @@ -1785,7 +1845,7 @@ add_garbage_collect_time: add_IO_time: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl get_time_diff lao r6,IO_time,2 @@ -1897,7 +1957,7 @@ collect_3: lao r8,garbage_collector_name,0 otoa r8,garbage_collector_name,0 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_s .endif @@ -1912,7 +1972,9 @@ collect_3: .ifdef PROFILE b profile_r .else - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .endif collect_2: @@ -1921,7 +1983,7 @@ collect_2: lao r8,garbage_collector_name,1 otoa r8,garbage_collector_name,1 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_s .endif @@ -1934,7 +1996,9 @@ collect_2: .ifdef PROFILE b profile_r .else - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .endif collect_1: @@ -1943,7 +2007,7 @@ collect_1: lao r8,garbage_collector_name,2 otoa r8,garbage_collector_name,2 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_s .endif @@ -1953,7 +2017,9 @@ collect_1: .ifdef PROFILE b profile_r .else - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .endif .ifdef PROFILE @@ -1962,7 +2028,7 @@ collect_0: lao r8,garbage_collector_name,3 otoa r8,garbage_collector_name,3 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_s bl collect_0_ @@ -2135,7 +2201,7 @@ no_mark3: .thumb_func collect: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_execute_time @@ -2210,7 +2276,7 @@ no_print_stack_sizes: add r4,r4,#63*4 lsr r4,r4,#8 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl zero_bit_vector @@ -2235,7 +2301,7 @@ no_print_stack_sizes: sto r14,r12,heap_end_after_copy_gc,3 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl zero_bit_vector b end_zero_bit_vector @@ -2246,7 +2312,7 @@ zero_all: ldo r4,r12,heap_copied_vector_size,3 lsr r4,r4,#2 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl zero_bit_vector @@ -2266,7 +2332,7 @@ end_zero_bit_vector: ldr r9,[sp],#4 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_garbage_collect_time @@ -2413,7 +2479,7 @@ no_mark_scan: str r6,[sp,#-4]! str r3,[sp,#-4]! .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl _munmap add sp,sp,#8 @@ -2499,7 +2565,7 @@ no_heap_use_message: .if FINALIZERS .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl call_finalizers .endif @@ -2747,7 +2813,9 @@ end_call_finalizers: laol r11,__Nil-4,__Nil_o_m4,2 otoa r11,__Nil_o_m4,2 sto r11,r12,free_finalizer_list,2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .endif .if WRITE_HEAP @@ -2764,7 +2832,7 @@ copy_to_compact_with_alloc_in_extra_heap: out_of_memory_4: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_garbage_collect_time @@ -2800,7 +2868,9 @@ zero_bits1_2: zero_bits1_5: subs r4,r4,#1 bhs zero_bits1_4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func reorder: @@ -2853,7 +2923,9 @@ st_reorder_lp: add sp,sp,#8 ldr r8,[sp],#4 ldr r9,[sp],#4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ @ the sliding compacting garbage collector @@ -3151,7 +3223,7 @@ vector_at_end_2: .thumb_func no_copy_garbage_collection: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_garbage_collect_time @@ -3167,7 +3239,7 @@ no_copy_garbage_collection: .thumb_func stack_overflow: .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl add_execute_time @@ -3203,7 +3275,7 @@ halt: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl write_profile_stack .endif @@ -3263,7 +3335,7 @@ eval_fill: mov r6,r7 ldr r12,[r7] .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r12 mov r7,r6 @@ -3275,7 +3347,9 @@ eval_fill: str r8,[r6,#4] ldr r8,[r7,#8] str r8,[r6,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .p2align 2 b e__system__eaind @@ -3304,7 +3378,9 @@ __indirection: str r8,[r6,#4] ldr r8,[r7,#8] str r8,[r6,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .if MARK_GC eval_fill2: @@ -3322,7 +3398,7 @@ eval_fill2: mov r6,r7 .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! blx r4 mov r7,r6 @@ -3334,12 +3410,14 @@ eval_fill2: str r8,[r6,#4] ldr r8,[r7,#8] str r8,[r6,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .endif .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3353,7 +3431,7 @@ eval_upd_0: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3369,7 +3447,7 @@ eval_upd_1: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3385,7 +3463,7 @@ eval_upd_2: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3403,7 +3481,7 @@ eval_upd_3: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3424,7 +3502,7 @@ eval_upd_4: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3447,7 +3525,7 @@ eval_upd_5: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3472,7 +3550,7 @@ eval_upd_6: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3510,7 +3588,7 @@ eval_upd_n_lp: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3522,7 +3600,7 @@ eval_upd_8: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3534,7 +3612,7 @@ eval_upd_9: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3546,7 +3624,7 @@ eval_upd_10: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3558,7 +3636,7 @@ eval_upd_11: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3570,7 +3648,7 @@ eval_upd_12: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3582,7 +3660,7 @@ eval_upd_13: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3594,7 +3672,7 @@ eval_upd_14: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3606,7 +3684,7 @@ eval_upd_15: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3618,7 +3696,7 @@ eval_upd_16: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3630,7 +3708,7 @@ eval_upd_17: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3642,7 +3720,7 @@ eval_upd_18: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3654,7 +3732,7 @@ eval_upd_19: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3666,7 +3744,7 @@ eval_upd_20: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3678,7 +3756,7 @@ eval_upd_21: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3690,7 +3768,7 @@ eval_upd_22: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3702,7 +3780,7 @@ eval_upd_23: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3714,7 +3792,7 @@ eval_upd_24: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3726,7 +3804,7 @@ eval_upd_25: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3738,7 +3816,7 @@ eval_upd_26: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3750,7 +3828,7 @@ eval_upd_27: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3762,7 +3840,7 @@ eval_upd_28: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3774,7 +3852,7 @@ eval_upd_29: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3786,7 +3864,7 @@ eval_upd_30: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3798,7 +3876,7 @@ eval_upd_31: .ifdef PROFILE .align - add lr,pc,#9 + add lr,pc,#8 str lr,[sp,#-4]! bl profile_n mov r8,r4 @@ -3883,7 +3961,9 @@ cat_string_11: @ align heap pointer add r10,r10,#3 and r10,r10,#-4 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_3: bl collect_2 b gc_r_3 @@ -3892,7 +3972,9 @@ gc_3: bl collect_2 empty_string: lao r6,zero_length_string,0 otoa r6,zero_length_string,0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .ifdef PIC ltol __STRING__+2,__STRING___o_2,1 @@ -3947,7 +4029,9 @@ sliceAC_copy_lp: bne sliceAC_copy_lp sliceAC_after_copy_lp: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_4: bl collect_1 @@ -4000,7 +4084,9 @@ updateAC_copy_lp: updateAC_after_copy_lp: strb r4,[r3] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr gc_5: bl collect_1 b r_gc_5 @@ -4062,11 +4148,15 @@ equal_string_2: .thumb_func equal_string_eq: mov r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func equal_string_ne: mov r4,#0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.cmpAC,"ax" cmpAC: @@ -4124,7 +4214,9 @@ cmp_string_2: bne cmp_string_ne .thumb_func cmp_string_eq: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr cmp_string_ne4: @ to do compare bytes using and instead of ldrb ldrb r3,[r7] @@ -4146,10 +4238,14 @@ cmp_string_ne4: cmp_string_ne: bhi cmp_string_r1 mov r4,#-1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr cmp_string_r1: mov r4,#1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.string_to_string_node,"ax" .thumb_func @@ -4181,7 +4277,9 @@ string_to_string_node_4: bge string_to_string_node_2 mov r6,r8 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func string_to_string_node_gc: @@ -4224,7 +4322,9 @@ int_array_to_node_4: subs r4,r4,#1 bge int_array_to_node_2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func int_array_to_node_gc: @@ -4276,7 +4376,9 @@ real_array_to_node_4: subs r4,r4,#1 bge real_array_to_node_2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func real_array_to_node_gc: @@ -4406,7 +4508,9 @@ no_collect_4574: str r12,[r10,#8] add r12,r10,#12 add r10,r12,r3,lsl #2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_arrayC: add r3,r4,#3 @@ -4424,7 +4528,9 @@ no_collect_4573: str r4,[r10,#4] add r12,r10,#8 add r10,r12,r3,lsl #2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_arrayI: add r12,r4,#3 @@ -4442,7 +4548,9 @@ no_collect_4572: str r12,[r10,#8] add r12,r10,#12 add r10,r12,r4,lsl #2 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_arrayR: add r12,r4,r4 @@ -4465,7 +4573,9 @@ no_collect_4580: str r12,[r10,#8] add r12,r10,#12 add r10,r12,r4,lsl #3 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr @ r4: number of elements, r3: element descriptor @ r2: element size, r1: element a size, a0:a_element-> a0: array @@ -4506,7 +4616,9 @@ _create_r_array_0: lsl r2,r2,#2 mul r12,r4,r2 add r10,r10,r12 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_r_array_1: lsl r2,r2,#2 @@ -4517,7 +4629,9 @@ _fillr1_array: _st_fillr1_array: subs r4,r4,#1 bcs _fillr1_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_r_array_2: lsl r2,r2,#2 @@ -4529,7 +4643,9 @@ _fillr2_array: _st_fillr2_array: subs r4,r4,#1 bcs _fillr2_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_r_array_3: lsl r2,r2,#2 @@ -4542,7 +4658,9 @@ _fillr3_array: _st_fillr3_array: subs r4,r4,#1 bcs _fillr3_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_r_array_4: lsl r2,r2,#2 @@ -4556,7 +4674,9 @@ _fillr4_array: _st_fillr4_array: subs r4,r4,#1 bcs _fillr4_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr _create_r_array_5: sub r2,r2,r1 @@ -4581,7 +4701,9 @@ _st_fillr5_array: subs r4,r4,#1 bcs _fillr5_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr create_arrayB: mov r7,r3 @@ -4669,7 +4791,9 @@ st_filli_array: subs r3,r3,#1 bcs filli_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr create_arrayR: add r12,r4,r4 @@ -4710,7 +4834,9 @@ st_fillr_array: subs r4,r4,#1 bcs fillr_array - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func create_array: @@ -4789,7 +4915,9 @@ st_fillr1_array_1: subs r4,r4,#1 bcs fillr1_array_lp - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr create_R_array_2: @ r4: number of elements, r3: element descriptor @@ -4835,7 +4963,9 @@ st_fillr2_array: subs r4,r4,#1 bcs fillr2_array_1 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr create_R_array_3: @ r4: number of elements, r3: element descriptor @@ -5044,7 +5174,9 @@ repl_args_b_4: ldr r8,[r6,#4] str r8,[r9],#4 repl_args_b_1: - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func push_arg_b: @@ -5058,7 +5190,9 @@ push_arg_b_2: subs r3,r3,#2 push_arg_b_1: ldr r6,[r6,r3,lsl #2] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func del_args: @@ -5073,7 +5207,9 @@ del_args: str r8,[r7,#4] ldr r8,[r6,#8] str r8,[r7,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr del_args_2: bne del_args_3 @@ -5084,7 +5220,9 @@ del_args_2: ldr r8,[r6,#8] ldr r8,[r8] str r8,[r7,#8] - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr del_args_3: subs r5,r5,r4 @@ -5104,7 +5242,9 @@ del_args_copy_args: subs r4,r4,#1 bgt del_args_copy_args - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .thumb_func del_args_gc: @@ -5121,7 +5261,9 @@ sin_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.cos_real,"ax" .thumb_func @@ -5133,7 +5275,9 @@ cos_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.tan_real,"ax" .thumb_func @@ -5145,7 +5289,9 @@ tan_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.asin_real,"ax" .thumb_func @@ -5157,7 +5303,9 @@ asin_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.acos_real,"ax" .thumb_func @@ -5169,7 +5317,9 @@ acos_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.atan_real,"ax" .thumb_func @@ -5181,7 +5331,9 @@ atan_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.ln_real,"ax" .thumb_func @@ -5193,7 +5345,9 @@ ln_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.log10_real,"ax" log10_real: @@ -5204,7 +5358,9 @@ log10_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.exp_real,"ax" .thumb_func @@ -5216,7 +5372,9 @@ exp_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.pow_real,"ax" .thumb_func @@ -5233,7 +5391,9 @@ pow_real: .ifdef SOFT_FP_CC vmov d0,r0,r1 .endif - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .section .text.entier_real,"ax" .thumb_func @@ -5250,7 +5410,9 @@ entier_real: r_to_i_real: vcvtr.s32.f64 s0,d0 vmov r4,s0 - ldr pc,[sp],#4 + ldr lr,[sp],#4 + orr lr,lr,#1 + mov pc,lr .text -- cgit v1.2.3