From 14b21f8ad8fa1eee91dc55839f5d42664c6cda35 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 19 Sep 2016 16:56:17 +0000 Subject: Fix PC offset when pushing to stack --- thumb2ap.s | 232 ++++++++++++++++++++-------------------- thumb2compact.s | 24 ++--- thumb2compact_rmark.s | 12 +-- thumb2compact_rmarkr.s | 4 +- thumb2mark.s | 38 +++---- thumb2startup.s | 280 ++++++++++++++++++++++++------------------------- 6 files changed, 295 insertions(+), 295 deletions(-) diff --git a/thumb2ap.s b/thumb2ap.s index db28353..530c258 100644 --- a/thumb2ap.s +++ b/thumb2ap.s @@ -599,8 +599,8 @@ repl_args_5: no_fast_ap32: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -613,8 +613,8 @@ no_fast_ap32: no_fast_ap31: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -627,8 +627,8 @@ no_fast_ap31: no_fast_ap30: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -641,8 +641,8 @@ no_fast_ap30: no_fast_ap29: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -655,8 +655,8 @@ no_fast_ap29: no_fast_ap28: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -669,8 +669,8 @@ no_fast_ap28: no_fast_ap27: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -683,8 +683,8 @@ no_fast_ap27: no_fast_ap26: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -697,8 +697,8 @@ no_fast_ap26: no_fast_ap25: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -711,8 +711,8 @@ no_fast_ap25: no_fast_ap24: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -725,8 +725,8 @@ no_fast_ap24: no_fast_ap23: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -739,8 +739,8 @@ no_fast_ap23: no_fast_ap22: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -753,8 +753,8 @@ no_fast_ap22: no_fast_ap21: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -767,8 +767,8 @@ no_fast_ap21: no_fast_ap20: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -781,8 +781,8 @@ no_fast_ap20: no_fast_ap19: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -795,8 +795,8 @@ no_fast_ap19: no_fast_ap18: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -809,8 +809,8 @@ no_fast_ap18: no_fast_ap17: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -823,8 +823,8 @@ no_fast_ap17: no_fast_ap16: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -837,8 +837,8 @@ no_fast_ap16: no_fast_ap15: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -851,8 +851,8 @@ no_fast_ap15: no_fast_ap14: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -865,8 +865,8 @@ no_fast_ap14: no_fast_ap13: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -879,8 +879,8 @@ no_fast_ap13: no_fast_ap12: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -893,8 +893,8 @@ no_fast_ap12: no_fast_ap11: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -907,8 +907,8 @@ no_fast_ap11: no_fast_ap10: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -921,8 +921,8 @@ no_fast_ap10: no_fast_ap9: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -935,8 +935,8 @@ no_fast_ap9: no_fast_ap8: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -949,8 +949,8 @@ no_fast_ap8: no_fast_ap7: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -963,8 +963,8 @@ no_fast_ap7: no_fast_ap6: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -977,8 +977,8 @@ no_fast_ap6: no_fast_ap5: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -991,8 +991,8 @@ no_fast_ap5: no_fast_ap4: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -1005,8 +1005,8 @@ no_fast_ap4: no_fast_ap3: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r11,[r6] mov r7,r6 @@ -1019,8 +1019,8 @@ no_fast_ap3: no_fast_ap2: ldr r12,[r11,#2] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 ldr r8,[r6] mov r7,r6 @@ -2211,8 +2211,8 @@ apupd_7: ldr r8,[r9,#-28] ldr r4,[r9,#-32] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_8 lao r12,e__system__nind,29 subs r9,r9,#4 @@ -2231,8 +2231,8 @@ apupd_8: ldr r8,[r9,#-32] ldr r4,[r9,#-36] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_9 lao r12,e__system__nind,30 subs r9,r9,#4 @@ -2251,8 +2251,8 @@ apupd_9: ldr r8,[r9,#-36] ldr r4,[r9,#-40] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_10 lao r12,e__system__nind,31 subs r9,r9,#4 @@ -2271,8 +2271,8 @@ apupd_10: ldr r8,[r9,#-40] ldr r4,[r9,#-44] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_11 lao r12,e__system__nind,32 subs r9,r9,#4 @@ -2291,8 +2291,8 @@ apupd_11: ldr r8,[r9,#-44] ldr r4,[r9,#-48] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_12 lao r12,e__system__nind,33 subs r9,r9,#4 @@ -2311,8 +2311,8 @@ apupd_12: ldr r8,[r9,#-48] ldr r4,[r9,#-52] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_13 lao r12,e__system__nind,34 subs r9,r9,#4 @@ -2331,8 +2331,8 @@ apupd_13: ldr r8,[r9,#-52] ldr r4,[r9,#-56] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_14 lao r12,e__system__nind,35 subs r9,r9,#4 @@ -2351,8 +2351,8 @@ apupd_14: ldr r8,[r9,#-56] ldr r4,[r9,#-60] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_15 lao r12,e__system__nind,36 subs r9,r9,#4 @@ -2371,8 +2371,8 @@ apupd_15: ldr r8,[r9,#-60] ldr r4,[r9,#-64] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_16 lao r12,e__system__nind,37 subs r9,r9,#4 @@ -2391,8 +2391,8 @@ apupd_16: ldr r8,[r9,#-64] ldr r4,[r9,#-68] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_17 lao r12,e__system__nind,38 subs r9,r9,#4 @@ -2411,8 +2411,8 @@ apupd_17: ldr r8,[r9,#-68] ldr r4,[r9,#-72] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_18 lao r12,e__system__nind,39 subs r9,r9,#4 @@ -2431,8 +2431,8 @@ apupd_18: ldr r8,[r9,#-72] ldr r4,[r9,#-76] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_19 lao r12,e__system__nind,40 subs r9,r9,#4 @@ -2451,8 +2451,8 @@ apupd_19: ldr r8,[r9,#-76] ldr r4,[r9,#-80] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_20 lao r12,e__system__nind,41 subs r9,r9,#4 @@ -2471,8 +2471,8 @@ apupd_20: ldr r8,[r9,#-80] ldr r4,[r9,#-84] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_21 lao r12,e__system__nind,42 subs r9,r9,#4 @@ -2491,8 +2491,8 @@ apupd_21: ldr r8,[r9,#-84] ldr r4,[r9,#-88] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_22 lao r12,e__system__nind,43 subs r9,r9,#4 @@ -2511,8 +2511,8 @@ apupd_22: ldr r8,[r9,#-88] ldr r4,[r9,#-92] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_23 lao r12,e__system__nind,44 subs r9,r9,#4 @@ -2531,8 +2531,8 @@ apupd_23: ldr r8,[r9,#-92] ldr r4,[r9,#-96] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_24 lao r12,e__system__nind,45 subs r9,r9,#4 @@ -2551,8 +2551,8 @@ apupd_24: ldr r8,[r9,#-96] ldr r4,[r9,#-100] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_25 lao r12,e__system__nind,46 subs r9,r9,#4 @@ -2571,8 +2571,8 @@ apupd_25: ldr r8,[r9,#-100] ldr r4,[r9,#-104] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_26 lao r12,e__system__nind,47 subs r9,r9,#4 @@ -2591,8 +2591,8 @@ apupd_26: ldr r8,[r9,#-104] ldr r4,[r9,#-108] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_27 lao r12,e__system__nind,48 subs r9,r9,#4 @@ -2611,8 +2611,8 @@ apupd_27: ldr r8,[r9,#-108] ldr r4,[r9,#-112] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_28 lao r12,e__system__nind,49 subs r9,r9,#4 @@ -2631,8 +2631,8 @@ apupd_28: ldr r8,[r9,#-112] ldr r4,[r9,#-116] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_29 lao r12,e__system__nind,50 subs r9,r9,#4 @@ -2651,8 +2651,8 @@ apupd_29: ldr r8,[r9,#-116] ldr r4,[r9,#-120] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_30 lao r12,e__system__nind,51 subs r9,r9,#4 @@ -2671,8 +2671,8 @@ apupd_30: ldr r8,[r9,#-120] ldr r4,[r9,#-124] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_31 lao r12,e__system__nind,52 subs r9,r9,#4 @@ -2691,8 +2691,8 @@ apupd_31: ldr r8,[r9,#-124] ldr r4,[r9,#-128] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_32 lao r12,e__system__nind,53 subs r9,r9,#4 @@ -2711,8 +2711,8 @@ apupd_32: ldr r8,[r9,#-128] ldr r4,[r9,#-132] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl move_33 lao r12,e__system__nind,54 subs r9,r9,#4 @@ -2757,8 +2757,8 @@ ap_31__u0: ap_32__u0: add r8,r8,pc .endif - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r8 apupd_upd: ldr r7,[r9,#-4] diff --git a/thumb2compact.s b/thumb2compact.s index cb79d52..611579e 100644 --- a/thumb2compact.s +++ b/thumb2compact.s @@ -46,8 +46,8 @@ mark_cafs_lp: lao r12,end_vector,13 sto r6,r12,end_vector,13 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! .if COMPACT_MARK_WITH_STACK bl rmark_stack_nodes .else @@ -72,8 +72,8 @@ end_mark_cafs: ldo r6,r12,stack_top,4 lao r12,end_vector,14 sto r6,r12,end_vector,14 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! .if COMPACT_MARK_WITH_STACK bl rmark_stack_nodes .else @@ -81,8 +81,8 @@ end_mark_cafs: .endif .ifdef MEASURE_GC - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_mark_compact_garbage_collect_time .endif @@ -224,12 +224,12 @@ finalizer_list_empty: lao r12,end_vector,15 sto r6,r12,end_vector,15 .if COMPACT_MARK_WITH_STACK - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl rmark_stack_nodes .else - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl mark_stack_nodes .endif .thumb_func @@ -983,8 +983,8 @@ move_array_ab: subs r4,r4,r3 add r7,r7,r6 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl reorder ldr r6,[sp],#4 diff --git a/thumb2compact_rmark.s b/thumb2compact_rmark.s index 9c2726c..767a9d5 100644 --- a/thumb2compact_rmark.s +++ b/thumb2compact_rmark.s @@ -35,8 +35,8 @@ rmark_more_stack_nodes: str r8,[r10,r3,lsl #2] ldr r4,[r6] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl rmark_stack_node add r9,r9,#4 @@ -857,8 +857,8 @@ rmark_ab_record_array: subs r4,r4,r3 add r6,r6,#4 add r7,r7,r6 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl reorder ldr r6,[sp],#4 @@ -963,8 +963,8 @@ rmark_array_nodes: str r8,[r10,r3,lsl #2] ldr r4,[r6] - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl rmark_array_node add r9,r9,#4 diff --git a/thumb2compact_rmarkr.s b/thumb2compact_rmarkr.s index e9f986f..9c7990d 100644 --- a/thumb2compact_rmarkr.s +++ b/thumb2compact_rmarkr.s @@ -726,8 +726,8 @@ rmarkr_ab_record_array: subs r4,r4,r3 add r6,r6,#4 add r7,r7,r6 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl reorder ldr r6,[sp],#4 diff --git a/thumb2mark.s b/thumb2mark.s index d1df94d..d413b79 100644 --- a/thumb2mark.s +++ b/thumb2mark.s @@ -52,8 +52,8 @@ _mark_cafs_lp: lao r12,end_vector,0 sto r4,r12,end_vector,0 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _mark_stack_nodes ldr r4,[sp],#4 @@ -69,8 +69,8 @@ _end_mark_cafs: lao r12,end_vector,1 sto r9,r12,end_vector,1 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _mark_stack_nodes lao r12,lazy_array_list,1 @@ -105,7 +105,7 @@ restore_arrays: lsr r3,r3,r12 sub r8,r8,#1 add r8,r8,r8 - add r12,pc,#0 + add r12,pc,#0 @TODO check offset ldr r8,[r12,r8] b skip_mod_inverse_table @@ -156,8 +156,8 @@ restore_lazy_array: mov r3,r8 sub r4,r4,r8 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl reorder .thumb_func @@ -230,8 +230,8 @@ end_finalizers_after_mark: str r2,[sp,#-4]! - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_garbage_collect_time ldr r2,[sp],#4 @@ -338,8 +338,8 @@ no_extra_word: _no_heap_use_message2: .ifdef FINALIZERS - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl call_finalizers .endif @@ -1275,8 +1275,8 @@ _mark_ab_array: lao r12,end_vector,5 sto r4,r12,end_vector,5 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _mark_stack_nodes ldr r3,[sp,#4+8] @@ -1349,8 +1349,8 @@ _end_set_a_array_bits: lao r12,end_vector,8 sto r4,r12,end_vector,8 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _mark_stack_nodes ldr r6,[sp],#4 @@ -1413,8 +1413,8 @@ _end_set_lazy_array_bits: lao r12,end_vector,11 sto r4,r12,end_vector,11 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _mark_stack_nodes ldr r6,[sp],#4 @@ -2353,8 +2353,8 @@ __mark__ab__record__array: add r6,r6,#4 add r7,r7,r6 - add r12,pc,#0 - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl reorder ldr r6,[sp],#4 diff --git a/thumb2startup.s b/thumb2startup.s index 57dcb00..a14cae1 100644 --- a/thumb2startup.s +++ b/thumb2startup.s @@ -528,41 +528,41 @@ abc_main: lao r12,start_address,0 sto r4,r12,start_address,0 .endif - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_clean tst r4,r4 bne init_error - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_timer lao r12,halt_sp,0 sto sp,r12,halt_sp,0 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_profiler .endif .ifdef DLL lao r12,start_address,1 ldo r4,r12,start_address,1 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r4 .else - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl __start .endif .thumb_func exit: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl exit_clean .thumb_func @@ -578,22 +578,22 @@ clean_init: mov r0,#1 sto r0,r12,dll_initisialised,0 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_clean tst r4,r4 bne init_dll_error - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_timer lao r12,halt_sp,1 sto sp,r12,halt_sp,1 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl init_profiler .endif @@ -624,8 +624,8 @@ clean_fini: lao r12,saved_a_stack_p,1 ldo r9,r12,saved_a_stack_p,1 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl exit_clean .thumb_func @@ -923,8 +923,8 @@ no_memory_3: .thumb_func exit_clean: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_execute_time lao r4,flags,4 @@ -939,8 +939,8 @@ exit_clean: lao r12,execute_time,0 ldo r4,r12,execute_time,0 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl print_time lao r0,time_string_2,0 @@ -950,8 +950,8 @@ exit_clean: lao r12,garbage_collect_time,0 ldo r4,r12,garbage_collect_time,0 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl print_time lao r0,time_string_4,0 @@ -967,8 +967,8 @@ exit_clean: ldo r12,r12,IO_time,0 add r4,r12 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl print_time mov r0,#10 @@ -985,8 +985,8 @@ no_print_execution_time: bl free .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl write_profile_information .endif @@ -1173,8 +1173,8 @@ end_print: .thumb_func dump: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl print b halt @@ -1536,8 +1536,8 @@ ItoAC: .if MY_ITOS lao r6,sprintf_buffer,2 otoa r6,sprintf_buffer,2 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl int_to_string lao r12,sprintf_buffer,3 @@ -1768,8 +1768,8 @@ get_time_diff: .thumb_func add_execute_time: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl get_time_diff lao r6,execute_time,3 otoa r6,execute_time,3 @@ -1783,16 +1783,16 @@ add_time: .thumb_func add_garbage_collect_time: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl get_time_diff lao r6,garbage_collect_time,3 otoa r6,garbage_collect_time,3 b add_time add_IO_time: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl get_time_diff lao r6,IO_time,2 otoa r6,IO_time,2 @@ -1902,8 +1902,8 @@ collect_3: .ifdef PROFILE lao r8,garbage_collector_name,0 otoa r8,garbage_collector_name,0 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_s .endif str r6,[r9] @@ -1925,8 +1925,8 @@ collect_2: .ifdef PROFILE lao r8,garbage_collector_name,1 otoa r8,garbage_collector_name,1 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_s .endif str r6,[r9] @@ -1946,8 +1946,8 @@ collect_1: .ifdef PROFILE lao r8,garbage_collector_name,2 otoa r8,garbage_collector_name,2 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_s .endif str r6,[r9],#4 @@ -1964,8 +1964,8 @@ collect_0: str lr,[sp,#-4]! lao r8,garbage_collector_name,3 otoa r8,garbage_collector_name,3 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_s bl collect_0_ b profile_r @@ -2136,8 +2136,8 @@ no_mark3: .thumb_func collect: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_execute_time lao r12,flags,7 @@ -2210,8 +2210,8 @@ no_print_stack_sizes: subs r4,r4,r12 add r4,r4,#63*4 lsr r4,r4,#8 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl zero_bit_vector lao r12,heap_end_after_copy_gc,2 @@ -2234,8 +2234,8 @@ no_print_stack_sizes: mov r14,#0 sto r14,r12,heap_end_after_copy_gc,3 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl zero_bit_vector b end_zero_bit_vector @@ -2244,8 +2244,8 @@ zero_all: lao r12,heap_copied_vector_size,3 ldo r4,r12,heap_copied_vector_size,3 lsr r4,r4,#2 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl zero_bit_vector .thumb_func @@ -2263,8 +2263,8 @@ end_zero_bit_vector: ldr r9,[sp],#4 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_garbage_collect_time lao r12,n_allocated_words,2 @@ -2409,8 +2409,8 @@ no_mark_scan: str r6,[sp,#-4]! str r3,[sp,#-4]! - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl _munmap add sp,sp,#8 @@ -2494,8 +2494,8 @@ end_garbage_collect_: no_heap_use_message: .if FINALIZERS - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl call_finalizers .endif @@ -2758,8 +2758,8 @@ copy_to_compact_with_alloc_in_extra_heap: .endif out_of_memory_4: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_garbage_collect_time lao r8,out_of_memory_string_4,0 @@ -3144,8 +3144,8 @@ vector_at_end_2: .thumb_func no_copy_garbage_collection: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_garbage_collect_time mov r4,r10 @@ -3159,8 +3159,8 @@ no_copy_garbage_collection: .thumb_func stack_overflow: - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl add_execute_time lao r8,stack_overflow_string,0 @@ -3194,8 +3194,8 @@ halt: ldo sp,r12,halt_sp,3 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl write_profile_stack .endif @@ -3253,8 +3253,8 @@ eval_fill: str r6,[r9],#4 mov r6,r7 ldr r12,[r7] - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r12 mov r7,r6 ldr r6,[r9,#-4]! @@ -3311,8 +3311,8 @@ eval_fill2: add r9,r9,#4 mov r6,r7 - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! blx r4 mov r7,r6 ldr r6,[r9,#-4]! @@ -3327,8 +3327,8 @@ eval_fill2: .endif .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3340,8 +3340,8 @@ eval_upd_0: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3355,8 +3355,8 @@ eval_upd_1: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3370,8 +3370,8 @@ eval_upd_2: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3387,8 +3387,8 @@ eval_upd_3: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3407,8 +3407,8 @@ eval_upd_4: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3429,8 +3429,8 @@ eval_upd_5: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3453,8 +3453,8 @@ eval_upd_6: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3490,8 +3490,8 @@ eval_upd_n_lp: mov pc,r11 .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3501,8 +3501,8 @@ eval_upd_8: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3512,8 +3512,8 @@ eval_upd_9: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3523,8 +3523,8 @@ eval_upd_10: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3534,8 +3534,8 @@ eval_upd_11: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3545,8 +3545,8 @@ eval_upd_12: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3556,8 +3556,8 @@ eval_upd_13: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3567,8 +3567,8 @@ eval_upd_14: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3578,8 +3578,8 @@ eval_upd_15: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3589,8 +3589,8 @@ eval_upd_16: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3600,8 +3600,8 @@ eval_upd_17: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3611,8 +3611,8 @@ eval_upd_18: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3622,8 +3622,8 @@ eval_upd_19: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3633,8 +3633,8 @@ eval_upd_20: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3644,8 +3644,8 @@ eval_upd_21: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3655,8 +3655,8 @@ eval_upd_22: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3666,8 +3666,8 @@ eval_upd_23: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3677,8 +3677,8 @@ eval_upd_24: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3688,8 +3688,8 @@ eval_upd_25: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3699,8 +3699,8 @@ eval_upd_26: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3710,8 +3710,8 @@ eval_upd_27: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3721,8 +3721,8 @@ eval_upd_28: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3732,8 +3732,8 @@ eval_upd_29: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3743,8 +3743,8 @@ eval_upd_30: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif @@ -3754,8 +3754,8 @@ eval_upd_31: b eval_upd_n .ifdef PROFILE - mov r12,pc - str r12,[sp,#-4]! + add lr,pc,#9 + str lr,[sp,#-4]! bl profile_n mov r8,r4 .endif -- cgit v1.2.3