summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-09-19 16:56:17 +0000
committerCamil Staps2016-09-19 16:56:17 +0000
commit14b21f8ad8fa1eee91dc55839f5d42664c6cda35 (patch)
tree9b7d2f4f919075f7b55e05efb596688cee578180
parentAdded .thumb_func (diff)
Fix PC offset when pushing to stack
-rw-r--r--thumb2ap.s232
-rw-r--r--thumb2compact.s24
-rw-r--r--thumb2compact_rmark.s12
-rw-r--r--thumb2compact_rmarkr.s4
-rw-r--r--thumb2mark.s38
-rw-r--r--thumb2startup.s280
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