summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCamil Staps2016-11-08 19:01:19 +0000
committerCamil Staps2016-11-08 19:01:19 +0000
commit70a575a77880dbed4fda8ea1bece54e5c1244d06 (patch)
tree1ca748ae44166c0dce66bbf7dfec06f4bc3be77e
parentCleanup thumb2ap.s (diff)
Cleanup: load pc directly instead of through lr
-rw-r--r--thumb2divmod.s24
-rw-r--r--thumb2startup.s240
2 files changed, 89 insertions, 175 deletions
diff --git a/thumb2divmod.s b/thumb2divmod.s
index 8aeabb4..ee01f75 100644
--- a/thumb2divmod.s
+++ b/thumb2divmod.s
@@ -7,6 +7,7 @@
.globl divide
.thumb_func
+ .align
divide:
eor r12,r3,r4
cmp r4,#0
@@ -47,8 +48,7 @@ divide:
cmp r12,#0
it lt
neglt r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
divide_large_result:
@@ -64,17 +64,15 @@ divide_large_result:
cmp r12,#0
it lt
neglt r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
divide_result_0:
mov r4,#0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
-divide_by_small_number:
.align
+divide_by_small_number:
mov r1,r4,lsl #3
add r1,r1,pc
ldrb r4,[r1,#(div_mod_table+1)-(divide_by_small_number+8)]
@@ -87,8 +85,7 @@ divide_by_small_number:
cmp r12,#0
it lt
neglt r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.globl modulo
.thumb_func
@@ -129,8 +126,7 @@ modulo:
cmp r12,#0
it lt
neglt r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
modulo_large_divide_result:
@@ -150,8 +146,7 @@ modulo_divide_result_0:
cmp r12,#0
it lt
neglt r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
modulo_of_small_number_:
@@ -174,8 +169,7 @@ modulo_from_quotient:
cmp r12,#0
it ge
negge r4,r4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
div_mod_table:
.long 0,0
diff --git a/thumb2startup.s b/thumb2startup.s
index 476ff44..36d9cba 100644
--- a/thumb2startup.s
+++ b/thumb2startup.s
@@ -874,8 +874,7 @@ no_mark2:
.endif
mov r4,#0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
no_memory_2:
lao r0,out_of_memory_string_1,0
@@ -885,8 +884,7 @@ no_memory_2:
? movl $1,@execution_aborted
.endif
mov r0,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
no_memory_3:
lao r0,out_of_memory_string_1,1
@@ -901,8 +899,7 @@ no_memory_3:
bl free
mov r0,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
exit_clean:
@@ -978,8 +975,7 @@ no_print_execution_time:
bl write_profile_information
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
__driver:
@@ -1142,8 +1138,7 @@ print_time:
mov r0,r6
bl ew_print_text
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_sc:
@@ -1159,8 +1154,7 @@ print:
.thumb_func
end_print:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
dump:
@@ -1262,22 +1256,19 @@ print_record:
.thumb_func
end_print_symbol:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_int_node:
ldr r0,[r6,#4]
bl w_print_int
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_int:
mov r0,r4
bl w_print_int
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_char_denotation:
@@ -1296,23 +1287,20 @@ print_char_denotation:
mov r0,#0x27
bl w_print_char
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_char_node:
ldr r0,[r6,#4]
bl w_print_char
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_char:
str r4,[sp,#-4]!
bl w_print_char
add sp,sp,#4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_bool:
@@ -1325,16 +1313,14 @@ print_true:
lao r0,true_c_string,0
otoa r0,true_c_string,0
bl w_print_string
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_false:
lao r0,false_c_string,0
otoa r0,false_c_string,0
bl w_print_string
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print_real:
@@ -1357,15 +1343,13 @@ print_real_:
mov sp,lr
bl w_print_real
mov sp,r11
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
print_string_a2:
ldr r1,[r8]
add r0,r8,#4
bl w_print_text
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
print__chars__sc:
@@ -1381,8 +1365,7 @@ print__string__:
bl w_print_text
.thumb_func
no_print_chars:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
push_a_r_args:
@@ -1505,8 +1488,7 @@ push_r_a_elements:
bcs push_r_a_elements_lp
ldr r4,[sp],#4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
BtoAC:
tst r4,r4
@@ -1514,13 +1496,11 @@ BtoAC:
BtoAC_true:
lao r6,true_string,0
otoa r6,true_string,0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
BtoAC_false:
lao r6,false_string,0
otoa r6,false_string,0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
RtoAC:
.if USE_CLIB
@@ -1608,8 +1588,7 @@ reverse_digits:
mov r12,#0
strb r12,[r6]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.else
mov r2,r4
lao r1,printf_int_string,0
@@ -1676,8 +1655,7 @@ D_to_S_cp_str_2:
bcs D_to_S_cp_str_1
mov r6,r8
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
eqD: ldr r4,[r6]
ldr r12,[r7]
@@ -1702,8 +1680,7 @@ eqD: ldr r4,[r6]
beq eqD_REAL
mov r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
eqD_CHAR:
eqD_INT:
@@ -1713,8 +1690,7 @@ eqD_INT:
cmp r3,r12
it eq
moveq r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
eqD_BOOL:
ldrb r3,[r6,#4]
@@ -1723,8 +1699,7 @@ eqD_BOOL:
cmp r3,r12
it eq
moveq r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
eqD_REAL:
vldr.f64 d0,[r6,#4]
@@ -1734,13 +1709,11 @@ eqD_REAL:
vmrs APSR_nzcv,fpscr
it eq
moveq r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
eqD_false:
mov r4,#0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
@
@ the timer
@
@@ -1765,8 +1738,7 @@ init_timer:
lao r12,IO_time,1
sto r4,r12,IO_time,1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
get_time_diff:
@@ -1783,8 +1755,7 @@ get_time_diff:
ldr r7,[r6]
str r4,[r6]
subs r4,r4,r7
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
add_execute_time:
@@ -1800,8 +1771,7 @@ add_time:
ldr r12,[r6]
add r4,r4,r12
str r4,[r6]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
add_garbage_collect_time:
@@ -1942,8 +1912,7 @@ collect_3:
.ifdef PROFILE
b profile_r
.else
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.endif
collect_2:
@@ -1965,8 +1934,7 @@ collect_2:
.ifdef PROFILE
b profile_r
.else
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.endif
collect_1:
@@ -2780,8 +2748,7 @@ 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 lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.endif
.if WRITE_HEAP
@@ -2834,8 +2801,7 @@ zero_bits1_2:
zero_bits1_5:
subs r4,r4,#1
bhs zero_bits1_4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
reorder:
@@ -2888,8 +2854,7 @@ st_reorder_lp:
add sp,sp,#8
ldr r8,[sp],#4
ldr r9,[sp],#4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
@
@ the sliding compacting garbage collector
@@ -3311,8 +3276,7 @@ eval_fill:
str r8,[r6,#4]
ldr r8,[r7,#8]
str r8,[r6,#8]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.p2align 2
b e__system__eaind
@@ -3341,8 +3305,7 @@ __indirection:
str r8,[r6,#4]
ldr r8,[r7,#8]
str r8,[r6,#8]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.if MARK_GC
eval_fill2:
@@ -3372,8 +3335,7 @@ eval_fill2:
str r8,[r6,#4]
ldr r8,[r7,#8]
str r8,[r6,#8]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.endif
.ifdef PROFILE
@@ -3922,8 +3884,7 @@ cat_string_11:
@ align heap pointer
add r10,r10,#3
and r10,r10,#-4
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
gc_3: bl collect_2
b gc_r_3
@@ -3932,8 +3893,7 @@ gc_3: bl collect_2
empty_string:
lao r6,zero_length_string,0
otoa r6,zero_length_string,0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.ifdef PIC
ltol __STRING__+2,__STRING___o_2,1
@@ -3988,8 +3948,7 @@ sliceAC_copy_lp:
bne sliceAC_copy_lp
sliceAC_after_copy_lp:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
gc_4:
bl collect_1
@@ -4042,8 +4001,7 @@ updateAC_copy_lp:
updateAC_after_copy_lp:
strb r4,[r3]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
gc_5: bl collect_1
b r_gc_5
@@ -4105,13 +4063,11 @@ equal_string_2:
.thumb_func
equal_string_eq:
mov r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
equal_string_ne:
mov r4,#0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.cmpAC,"ax"
cmpAC:
@@ -4169,8 +4125,7 @@ cmp_string_2:
bne cmp_string_ne
.thumb_func
cmp_string_eq:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
cmp_string_ne4:
@ to do compare bytes using and instead of ldrb
ldrb r3,[r7]
@@ -4192,12 +4147,10 @@ cmp_string_ne4:
cmp_string_ne:
bhi cmp_string_r1
mov r4,#-1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
cmp_string_r1:
mov r4,#1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.string_to_string_node,"ax"
.thumb_func
@@ -4229,8 +4182,7 @@ string_to_string_node_4:
bge string_to_string_node_2
mov r6,r8
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
string_to_string_node_gc:
@@ -4273,8 +4225,7 @@ int_array_to_node_4:
subs r4,r4,#1
bge int_array_to_node_2
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
int_array_to_node_gc:
@@ -4326,8 +4277,7 @@ real_array_to_node_4:
subs r4,r4,#1
bge real_array_to_node_2
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
real_array_to_node_gc:
@@ -4457,8 +4407,7 @@ no_collect_4574:
str r12,[r10,#8]
add r12,r10,#12
add r10,r12,r3,lsl #2
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_arrayC:
add r3,r4,#3
@@ -4476,8 +4425,7 @@ no_collect_4573:
str r4,[r10,#4]
add r12,r10,#8
add r10,r12,r3,lsl #2
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_arrayI:
add r12,r4,#3
@@ -4495,8 +4443,7 @@ no_collect_4572:
str r12,[r10,#8]
add r12,r10,#12
add r10,r12,r4,lsl #2
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_arrayR:
add r12,r4,r4
@@ -4519,8 +4466,7 @@ no_collect_4580:
str r12,[r10,#8]
add r12,r10,#12
add r10,r12,r4,lsl #3
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
@ r4: number of elements, r3: element descriptor
@ r2: element size, r1: element a size, a0:a_element-> a0: array
@@ -4561,8 +4507,7 @@ _create_r_array_0:
lsl r2,r2,#2
mul r12,r4,r2
add r10,r10,r12
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_r_array_1:
lsl r2,r2,#2
@@ -4573,8 +4518,7 @@ _fillr1_array:
_st_fillr1_array:
subs r4,r4,#1
bcs _fillr1_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_r_array_2:
lsl r2,r2,#2
@@ -4586,8 +4530,7 @@ _fillr2_array:
_st_fillr2_array:
subs r4,r4,#1
bcs _fillr2_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_r_array_3:
lsl r2,r2,#2
@@ -4600,8 +4543,7 @@ _fillr3_array:
_st_fillr3_array:
subs r4,r4,#1
bcs _fillr3_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_r_array_4:
lsl r2,r2,#2
@@ -4615,8 +4557,7 @@ _fillr4_array:
_st_fillr4_array:
subs r4,r4,#1
bcs _fillr4_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
_create_r_array_5:
sub r2,r2,r1
@@ -4641,8 +4582,7 @@ _st_fillr5_array:
subs r4,r4,#1
bcs _fillr5_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
create_arrayB:
mov r7,r3
@@ -4730,8 +4670,7 @@ st_filli_array:
subs r3,r3,#1
bcs filli_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
create_arrayR:
add r12,r4,r4
@@ -4772,8 +4711,7 @@ st_fillr_array:
subs r4,r4,#1
bcs fillr_array
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
create_array:
@@ -4852,8 +4790,7 @@ st_fillr1_array_1:
subs r4,r4,#1
bcs fillr1_array_lp
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
create_R_array_2:
@ r4: number of elements, r3: element descriptor
@@ -4899,8 +4836,7 @@ st_fillr2_array:
subs r4,r4,#1
bcs fillr2_array_1
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
create_R_array_3:
@ r4: number of elements, r3: element descriptor
@@ -5109,8 +5045,7 @@ repl_args_b_4:
ldr r8,[r6,#4]
str r8,[r9],#4
repl_args_b_1:
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
push_arg_b:
@@ -5124,8 +5059,7 @@ push_arg_b_2:
subs r3,r3,#2
push_arg_b_1:
ldr r6,[r6,r3,lsl #2]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
del_args:
@@ -5140,8 +5074,7 @@ del_args:
str r8,[r7,#4]
ldr r8,[r6,#8]
str r8,[r7,#8]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
del_args_2:
bne del_args_3
@@ -5152,8 +5085,7 @@ del_args_2:
ldr r8,[r6,#8]
ldr r8,[r8]
str r8,[r7,#8]
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
del_args_3:
subs r5,r5,r4
@@ -5173,8 +5105,7 @@ del_args_copy_args:
subs r4,r4,#1
bgt del_args_copy_args
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.thumb_func
del_args_gc:
@@ -5191,8 +5122,7 @@ sin_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.cos_real,"ax"
.thumb_func
@@ -5204,8 +5134,7 @@ cos_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.tan_real,"ax"
.thumb_func
@@ -5217,8 +5146,7 @@ tan_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.asin_real,"ax"
.thumb_func
@@ -5230,8 +5158,7 @@ asin_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.acos_real,"ax"
.thumb_func
@@ -5243,8 +5170,7 @@ acos_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.atan_real,"ax"
.thumb_func
@@ -5256,8 +5182,7 @@ atan_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.ln_real,"ax"
.thumb_func
@@ -5269,8 +5194,7 @@ ln_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.log10_real,"ax"
log10_real:
@@ -5281,8 +5205,7 @@ log10_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.exp_real,"ax"
.thumb_func
@@ -5294,8 +5217,7 @@ exp_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.pow_real,"ax"
.thumb_func
@@ -5312,8 +5234,7 @@ pow_real:
.ifdef SOFT_FP_CC
vmov d0,r0,r1
.endif
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.section .text.entier_real,"ax"
.thumb_func
@@ -5330,8 +5251,7 @@ entier_real:
r_to_i_real:
vcvtr.s32.f64 s0,d0
vmov r4,s0
- ldr lr,[sp],#4
- mov pc,lr
+ ldr pc,[sp],#4
.text