diff options
-rw-r--r-- | thumb2divmod.s | 24 | ||||
-rw-r--r-- | thumb2startup.s | 240 |
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 |