From 361b44e9a757fcafd5a3132417df429e3e3c4c0f Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Mon, 19 Sep 2016 07:43:48 +0000 Subject: Added .thumb_func --- thumb2compact.s | 55 +++++++++++++++++ thumb2divmod.s | 8 +++ thumb2fileIO3.s | 2 + thumb2mark.s | 109 +++++++++++++++++++++++++++++++++ thumb2startup.s | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 360 insertions(+) diff --git a/thumb2compact.s b/thumb2compact.s index ac79a79..cb79d52 100644 --- a/thumb2compact.s +++ b/thumb2compact.s @@ -30,6 +30,7 @@ NO_BIT_INSTRUCTIONS = 1 cmp r4,#0 beq end_mark_cafs + .thumb_func mark_cafs_lp: ldr r12,[r4,#-4] str r12,[sp,#-4]! @@ -57,6 +58,7 @@ mark_cafs_lp: tst r4,r4 bne mark_cafs_lp + .thumb_func end_mark_cafs: .if COMPACT_MARK_WITH_STACK lao r12,stack_p,6 @@ -110,6 +112,7 @@ end_mark_cafs: @ compact the heap + .thumb_func compact_heap: .ifdef FINALIZERS @@ -142,10 +145,12 @@ determine_free_finalizers_after_compact1: mov r9,r8 b finalizer_find_descriptor + .thumb_func finalizer_find_descriptor_lp: and r4,r4,#-4 mov r9,r4 ldr r4,[r4] + .thumb_func finalizer_find_descriptor: tst r4,#1 bne finalizer_find_descriptor_lp @@ -161,6 +166,7 @@ finalizer_find_descriptor: str r9,[r8] str r4,[r6] + .thumb_func finalizer_no_reverse: add r6,r8,#4 ldr r8,[r8,#4] @@ -195,7 +201,9 @@ end_finalizers_after_compact1: str r12,[r6] lao r12,finalizer_list,5 sto r4,r12,finalizer_list,5 + .thumb_func finalizer_list_already_reversed: + .thumb_func finalizer_list_empty: .if COMPACT_MARK_WITH_STACK @@ -224,6 +232,7 @@ finalizer_list_empty: str r12,[sp,#-4]! bl mark_stack_nodes .endif + .thumb_func free_finalizer_list_empty: .endif @@ -264,7 +273,9 @@ free_finalizer_list_empty: b skip_zeros @ d0,a0,a2: free + .thumb_func find_non_zero_long: + .thumb_func skip_zeros: subs r2,r2,#1 bcc end_copy @@ -272,6 +283,7 @@ skip_zeros: cmp r9,#0 beq skip_zeros @ a2: free + .thumb_func end_skip_zeros: lao r12,neg_heap_vector_plus_4,1 ldo r8,r12,neg_heap_vector_plus_4,1 @@ -279,12 +291,14 @@ end_skip_zeros: add r8,r11,r8,lsl #5 + .thumb_func bsf_and_copy_nodes: neg r12,r9 and r12,r12,r9 clz r3,r12 rsb r3,r3,#31 + .thumb_func copy_nodes: ldr r4,[r8,r3,lsl #2] @@ -321,6 +335,7 @@ end_list_2: sub r3,r3,#256 sub r3,r3,#3 + .thumb_func copy_record_arguments_all_b: str r3,[sp,#-4]! lao r12,heap_vector,10 @@ -371,6 +386,7 @@ copy_argument_part_1r: add r8,r8,r1 add r8,r11,r8,lsl #5 + .thumb_func bit_in_this_word: mov r12,#1 lsl r12,r12,r3 @@ -378,6 +394,7 @@ bit_in_this_word: ldr r3,[sp],#4 + .thumb_func copy_b_record_argument_part_arguments: ldr r4,[r6],#4 str r4,[r10],#4 @@ -388,6 +405,7 @@ copy_b_record_argument_part_arguments: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func copy_record_arguments_aa: mov r12,#(256+2)/2 sub r3,r3,r7 @@ -426,6 +444,7 @@ copy_record_argument_2: subs r3,r3,#1 bcc no_pointers_in_record + .thumb_func copy_record_pointers: ldr r7,[r6],#4 cmp r7,r6 @@ -444,23 +463,27 @@ copy_record_pointers_2: subs r3,r3,#1 bcs copy_record_pointers + .thumb_func no_pointers_in_record: ldr r3,[sp],#4 subs r3,r3,#1 bcc no_non_pointers_in_record + .thumb_func copy_non_pointers_in_record: ldr r4,[r6],#4 str r4,[r10],#4 subs r3,r3,#1 bcs copy_non_pointers_in_record + .thumb_func no_non_pointers_in_record: cmp r9,#0 bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func no_record_arguments: subs r3,r3,#3 update_up_list_2: @@ -490,6 +513,7 @@ copy_argument_part_2: copy_arguments_1: str r4,[r10],#4 + .thumb_func copy_argument_part_arguments: ldr r7,[r6],#4 cmp r7,r6 @@ -634,6 +658,7 @@ move_hnf_1_: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_record: mov r12,#258/2 subs r3,r3,r12,lsl #1 @@ -741,6 +766,7 @@ move_record_3_2: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func bit_in_next_word: sub r2,r2,#1 ldr r9,[r1],#4 @@ -787,9 +813,11 @@ move_record_1: bne move_hnf_1 b move_int_bool_or_char + .thumb_func move_real_or_file: ldr r4,[r6],#4 str r4,[r10],#4 + .thumb_func move_int_bool_or_char: ldr r4,[r6],#4 str r4,[r10],#4 @@ -815,6 +843,7 @@ move_normal_hnf_0: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_real_file_string_or_array: laol r12,__STRING__+2,__STRING___o_2,10 otoa r12,__STRING___o_2,10 @@ -836,6 +865,7 @@ cp_s_arg_lp3: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_array: .ifdef DLL laol r12,__ARRAY__+2,__ARRAY___o_2,2 @@ -846,6 +876,7 @@ move_array: cmp r9,#0 bne bsf_and_end_array_bit + .thumb_func skip_zeros_a: ldr r9,[r1],#4 sub r2,r2,#1 @@ -858,12 +889,14 @@ skip_zeros_a: add r8,r11,r8,lsl #5 + .thumb_func bsf_and_end_array_bit: neg r12,r9 and r12,r12,r9 clz r3,r12 rsb r3,r3,#31 + .thumb_func end_array_bit: bic r9,r9,r12 @@ -872,6 +905,7 @@ end_array_bit: cmp r6,r3 bne move_a_array + .thumb_func move_b_array: ldr r7,[r6] str r7,[r10] @@ -886,6 +920,7 @@ move_b_array: mov r4,r7 b cp_s_arg_lp3 + .thumb_func move_strict_basic_array: mov r4,r7 laol r12,INT+2,INT_o_2,14 @@ -901,11 +936,13 @@ move_strict_basic_array: add r4,r4,r4 b cp_s_arg_lp3 + .thumb_func move_bool_array: add r4,r4,#3 lsr r4,r4,#2 b cp_s_arg_lp3 + .thumb_func move_a_array: mov r7,r3 subs r3,r3,r6 @@ -935,6 +972,7 @@ move_a_array: cmp r4,r9 beq st_move_array_lp + .thumb_func move_array_ab: str r6,[sp,#-4]! @@ -961,6 +999,7 @@ move_array_ab: move_array_ab_lp1: ldr r4,[sp,#8] + .thumb_func move_array_ab_a_elements: ldr r3,[r6],#4 cmp r3,r6 @@ -974,18 +1013,21 @@ move_array_ab_a_elements: add r10,r10,#1 str r10,[r7] subs r10,r10,#1 + .thumb_func move_array_element_ab: str r3,[r10],#4 subs r4,r4,#1 bcs move_array_ab_a_elements ldr r4,[sp,#4] + .thumb_func move_array_ab_b_elements: ldr r3,[r6],#4 str r3,[r10],#4 subs r4,r4,#1 bcs move_array_ab_b_elements + .thumb_func st_move_array_lp_ab: ldr r12,[sp] subs r12,r12,#1 @@ -1015,12 +1057,15 @@ move_array_lp1: b end_array + .thumb_func move_array_element: str r4,[r10,#-4] + .thumb_func st_move_array_lp: subs r3,r3,#1 bcs move_array_lp1 + .thumb_func end_array: ldr r9,[sp],#4 @@ -1028,6 +1073,7 @@ end_array: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_lazy_node: mov r7,r4 ldr r3,[r7,#-4] @@ -1040,6 +1086,7 @@ move_lazy_node: cmp r3,#256 bge move_closure_with_unboxed_arguments + .thumb_func move_lazy_node_arguments: ldr r7,[r6],#4 cmp r7,r6 @@ -1060,6 +1107,7 @@ move_lazy_node_arguments: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_lazy_node_arguments_: str r7,[r10],#4 subs r3,r3,#1 @@ -1096,6 +1144,7 @@ move_lazy_node_0: bne bsf_and_copy_nodes b find_non_zero_long + .thumb_func move_closure_with_unboxed_arguments: beq move_closure_with_unboxed_arguments_1 add r3,r3,#1 @@ -1107,6 +1156,7 @@ move_closure_with_unboxed_arguments: str r4,[sp,#-4]! + .thumb_func move_closure_with_unboxed_arguments_lp: ldr r7,[r6],#4 cmp r7,r6 @@ -1126,6 +1176,7 @@ move_closure_with_unboxed_arguments_lp: ldr r4,[sp],#4 b move_non_pointers_of_closure + .thumb_func move_closure_with_unboxed_arguments_: str r7,[r10],#4 subs r3,r3,#1 @@ -1133,6 +1184,7 @@ move_closure_with_unboxed_arguments_: ldr r4,[sp],#4 + .thumb_func move_non_pointers_of_closure: ldr r3,[r6],#4 str r3,[r10],#4 @@ -1197,12 +1249,14 @@ move_closure_with_unboxed_arguments_1: .endif .endif + .thumb_func end_copy: .ifdef FINALIZERS lao r12,finalizer_list,6 ldo r6,r12,finalizer_list,6 + .thumb_func restore_finalizer_descriptors: laol r12,__Nil-4,__Nil_o_m4,8 otoa r12,__Nil_o_m4,8 @@ -1215,5 +1269,6 @@ restore_finalizer_descriptors: ldr r6,[r6,#4] b restore_finalizer_descriptors + .thumb_func end_restore_finalizer_descriptors: .endif diff --git a/thumb2divmod.s b/thumb2divmod.s index e123c5e..3343db6 100644 --- a/thumb2divmod.s +++ b/thumb2divmod.s @@ -6,6 +6,7 @@ .text .globl divide + .thumb_func divide: eor r12,r3,r4 cmp r4,#0 @@ -49,6 +50,7 @@ divide: neglt r4,r4 ldr pc,[sp],#4 + .thumb_func divide_large_result: bpl divide_result_0 @@ -68,6 +70,7 @@ divide_result_0: mov r4,#0 ldr pc,[sp],#4 + .thumb_func divide_by_small_number: mov r1,pc add r1,r1,r4,lsl #3 @@ -84,6 +87,7 @@ divide_by_small_number: ldr pc,[sp],#4 .globl modulo + .thumb_func modulo: cmp r4,#0 it lt @@ -116,6 +120,7 @@ modulo: movcs r3,r1 .endr + .thumb_func modulo_large_divide_result: bpl modulo_divide_result_0 @@ -135,6 +140,7 @@ modulo_divide_result_0: neglt r4,r4 ldr pc,[sp],#4 + .thumb_func modulo_of_small_number: mov r1,pc add r1,r1,r4,lsl #3 @@ -145,6 +151,7 @@ modulo_of_small_number: it cc umullcc r0,r2,r14,r2 lsr r2,r2,r1 + .thumb_func modulo_from_quotient: @ mls r4,r4,r2,r3 neg r3,r3 @@ -154,6 +161,7 @@ modulo_from_quotient: neglt r4,r4 ldr pc,[sp],#4 + .thumb_func div_mod_table: .long 0,0 .long 0x100,0xffffffff diff --git a/thumb2fileIO3.s b/thumb2fileIO3.s index da498ae..a18ff1e 100644 --- a/thumb2fileIO3.s +++ b/thumb2fileIO3.s @@ -8,10 +8,12 @@ .data .p2align 3 + .thumb_func freadstring_error: .ascii "Error in freadsubstring parameters." .byte 10,0 .byte 0,0,0 + .thumb_func fwritestring_error: .ascii "Error in fwritesubstring parameters." .byte 10,0 diff --git a/thumb2mark.s b/thumb2mark.s index a4168c8..d1df94d 100644 --- a/thumb2mark.s +++ b/thumb2mark.s @@ -40,6 +40,7 @@ ZERO_ARITY_DESCRIPTOR_OFFSET = -4 tst r4,r4 beq _end_mark_cafs + .thumb_func _mark_cafs_lp: ldr r3,[r4] ldr r8,[r4,#-4] @@ -59,6 +60,7 @@ _mark_cafs_lp: tst r4,r4 bne _mark_cafs_lp + .thumb_func _end_mark_cafs: lao r12,stack_top,2 ldo r9,r12,stack_top,2 @@ -77,6 +79,7 @@ _end_mark_cafs: cmp r6,#0 beq end_restore_arrays + .thumb_func restore_arrays: ldr r3,[r6] laol r12,__ARRAY__+2,__ARRAY___o_2,16 @@ -123,9 +126,11 @@ restore_arrays: .word 1332920885 .word -1108378657 + .thumb_func skip_mod_inverse_table: mul r3,r8,r3 + .thumb_func restore_lazy_array: ldr r10,[r6,#8] ldr r8,[r6,#4] @@ -155,6 +160,7 @@ restore_lazy_array: str r12,[sp,#-4]! bl reorder + .thumb_func no_reorder_array: mov r6,r9 cmp r6,#0 @@ -174,6 +180,7 @@ restore_array_size_1: tst r6,r6 bne restore_arrays + .thumb_func end_restore_arrays: .ifdef FINALIZERS @@ -185,6 +192,7 @@ end_restore_arrays: otoa r7,free_finalizer_list,4 ldr r8,[r6] + .thumb_func determine_free_finalizers_after_mark: laol r12,__Nil-4,__Nil_o_m4,4 otoa r12,__Nil_o_m4,4 @@ -206,6 +214,7 @@ determine_free_finalizers_after_mark: ldr r8,[r8,#4] b determine_free_finalizers_after_mark + .thumb_func finalizer_not_used_after_mark: str r8,[r7] add r7,r8,#4 @@ -214,6 +223,7 @@ finalizer_not_used_after_mark: str r8,[r6] b determine_free_finalizers_after_mark + .thumb_func end_finalizers_after_mark: str r8,[r7] .endif @@ -265,6 +275,7 @@ end_finalizers_after_mark: ldo r3,r12,heap_size_33,8 lsl r3,r3,#5 + .thumb_func not_largest_heap: cmp r3,r9 bls no_larger_heap @@ -275,10 +286,12 @@ not_largest_heap: cmp r3,r9 bls not_larger_then_heap mov r3,r9 + .thumb_func not_larger_then_heap: lsr r4,r3,#2 lao r12,bit_vector_size,4 sto r4,r12,bit_vector_size,4 + .thumb_func no_larger_heap: .endif mov r8,r4 @@ -294,6 +307,7 @@ no_larger_heap: mov r12,#0 str r12,[r10,r8,lsl #2] + .thumb_func no_extra_word: sub r4,r4,r2 lsl r4,r4,#2 @@ -337,6 +351,7 @@ _no_heap_use_message2: mov r6,r10 mov r2,#0 + .thumb_func _scan_bits: ldr r12,[r6] cmp r3,r12 @@ -349,6 +364,7 @@ _scan_bits: sto r2,r12,n_free_words_after_mark,5 b _end_scan + .thumb_func _zero_bits: add r7,r6,#4 add r6,r6,#4 @@ -359,6 +375,7 @@ _zero_bits: sto r2,r12,n_free_words_after_mark,6 b _end_bits + .thumb_func _skip_zero_bits_lp: cmp r4,#0 bne _end_zero_bits @@ -377,6 +394,7 @@ _skip_zero_bits_lp1: subs r4,r4,r7 b _end_bits2 + .thumb_func _end_zero_bits: sub r4,r6,r7 lsl r4,r4,#3 @@ -387,6 +405,7 @@ _end_zero_bits: blo _scan_bits @ n_free_words_after_mark updated + .thumb_func _found_free_memory: lao r12,n_free_words_after_mark,8 sto r2,r12,n_free_words_after_mark,8 @@ -414,6 +433,7 @@ _found_free_memory: ldmia sp!,{r0-r4,pc} @ n_free_words_after_mark updated + .thumb_func _end_bits: sub r4,r6,r7 add r4,r4,#4 @@ -428,6 +448,7 @@ _end_bits2: sto r2,r12,n_free_words_after_mark,9 @ n_free_words_after_mark updated + .thumb_func _end_scan: lao r12,bit_counter,4 sto r8,r12,bit_counter,4 @@ -488,11 +509,13 @@ _end_scan: @ a4: heap_vector @ d0,d1,a0,a1,a3: free + .thumb_func _mark_stack_nodes: lao r12,end_vector,2 ldo r12,r12,end_vector,2 cmp r8,r12 beq _end_mark_nodes + .thumb_func _mark_stack_nodes_: ldr r6,[r8],#4 @@ -516,6 +539,7 @@ _mark_stack_nodes_: mov r9,#1 b __mark_node + .thumb_func __end_mark_using_reversal: ldr r8,[sp],#4 str r6,[r8,#-4] @@ -544,9 +568,11 @@ _mark_record_2_c: blo __mark_using_reversal _mark_node2: + .thumb_func _shared_argument_part: ldr r6,[r6] + .thumb_func _mark_node: sub r7,r6,r0 cmp r7,r1 @@ -562,6 +588,7 @@ _mark_node: tst r9,r12 bne _mark_next_node + .thumb_func _mark_arguments: ldr r4,[r6] tst r4,#2 @@ -609,6 +636,7 @@ fits_in_word_1: tst r9,r12 bne _shared_argument_part + .thumb_func _no_shared_argument_part: orr r12,r12,r9 str r12,[r10,r3,lsl #2] @@ -631,6 +659,7 @@ fits_in_word_2: sub r8,r8,#2 str r3,[sp,#-4]! + .thumb_func _push_hnf_args: ldr r3,[r7,#-4]! str r3,[sp,#-4]! @@ -701,6 +730,7 @@ _mark_selector_node_1: cmp r12,#2 bls _small_tuple_or_record + .thumb_func _large_tuple_or_record: ldr r8,[r7,#8] sub r8,r8,r0 @@ -742,6 +772,7 @@ _mark_tuple_selector_node_2: str r6,[r8] b _mark_node + .thumb_func _small_tuple_or_record: lao r8,e__system__nind,12 .ifdef PIC @@ -840,6 +871,7 @@ _mark_strict_record_selector_node_1: tst r8,r12 bne _mark_node3 + .thumb_func _select_from_small_record: .ifdef PIC ldr r12,[r4,#-8] @@ -889,11 +921,13 @@ _mark_strict_record_selector_node_5: str r4,[r6] b _mark_next_node + .thumb_func _mark_indirection_node: _mark_node3: mov r6,r7 b _mark_node + .thumb_func _mark_next_node: ldr r6,[sp],#4 tst r6,r6 @@ -905,9 +939,11 @@ _mark_next_node: cmp r8,r12 bne _mark_stack_nodes_ + .thumb_func _end_mark_nodes: ldr pc,[sp],#4 + .thumb_func _mark_lazy_node: ldr r8,[r4,#-4] tst r8,r8 @@ -935,6 +971,7 @@ _mark_lazy_node: str r7,[r12,r3,lsl #2] fits_in_word_7: sub r8,r8,#3 + .thumb_func _push_lazy_args: ldr r3,[r6,#-4]! str r3,[sp,#-4]! @@ -948,6 +985,7 @@ _push_lazy_args: b __mark_using_reversal + .thumb_func _mark_closure_with_unboxed_arguments: mov r4,r8 and r8,r8,#255 @@ -979,6 +1017,7 @@ fits_in_word_7_: add r6,r12,r8,lsl #2 bne _push_lazy_args + .thumb_func _mark_closure_with_one_boxed_argument: ldr r6,[r6,#-4] b _mark_node @@ -998,6 +1037,7 @@ _mark_hnf_0: cmp r4,r12 bhi _mark_normal_hnf_0 + .thumb_func _mark_bool: add r2,r2,#2 @@ -1014,12 +1054,14 @@ _mark_normal_hnf_0: add r2,r2,#1 b _mark_next_node + .thumb_func _mark_real_file_or_string: laol r12,__STRING__+2,__STRING___o_2,8 otoa r12,__STRING___o_2,8 cmp r4,r12 bls _mark_string_or_array + .thumb_func _mark_real_or_file: ldr r12,[r10,r3,lsl #2] orr r12,r12,r9 @@ -1035,6 +1077,7 @@ _mark_real_or_file: str r9,[r12,r3,lsl #2] b _mark_next_node + .thumb_func _mark_record: mov r12,#258/2 subs r8,r8,r12,lsl #1 @@ -1084,6 +1127,7 @@ fits_in_word_13: ldr r7,[r12,r4,lsl #2] orr r7,r7,#1 str r7,[r12,r4,lsl #2] + .thumb_func _push_record_arguments: ldr r7,[r6,#4] mov r8,r3 @@ -1138,9 +1182,11 @@ _mark_record_1: b _mark_bool + .thumb_func _mark_string_or_array: beq _mark_string_ + .thumb_func _mark_array: ldr r8,[r6,#8] cmp r8,#0 @@ -1162,6 +1208,7 @@ _mark_array: cmp r4,r8 beq _mark_a_record_array + .thumb_func _mark_ab_record_array: ldr r12,[r10,r3,lsl #2] orr r12,r12,r9 @@ -1186,6 +1233,7 @@ _mark_ab_record_array: cmp r3,r4 bhs _last_ab_array_bits + .thumb_func _mark_ab_array_lp: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 @@ -1194,11 +1242,13 @@ _mark_ab_array_lp: cmp r3,r4 blo _mark_ab_array_lp + .thumb_func _last_ab_array_bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 str r12,[r10,r3,lsl #2] + .thumb_func _end_set_ab_array_bits: ldr r4,[r6,#4] ldr r7,[r6,#8] @@ -1216,6 +1266,7 @@ _end_set_ab_array_bits: str r12,[sp,#-4]! b _mark_ab_array_begin + .thumb_func _mark_ab_array: ldr r3,[sp,#8] str r4,[sp,#-4]! @@ -1232,6 +1283,7 @@ _mark_ab_array: ldr r8,[sp],#4 ldr r4,[sp],#4 add r8,r8,r3 + .thumb_func _mark_ab_array_begin: subs r4,r4,#1 bcs _mark_ab_array @@ -1242,6 +1294,7 @@ _mark_ab_array_begin: add sp,sp,#12 b _mark_next_node + .thumb_func _mark_a_record_array: ldr r12,[r10,r3,lsl #2] orr r12,r12,r9 @@ -1268,6 +1321,7 @@ _mark_a_record_array: cmp r3,r4 bhs _last_a_array_bits + .thumb_func _mark_a_array_lp: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 @@ -1276,11 +1330,13 @@ _mark_a_array_lp: cmp r3,r4 blo _mark_a_array_lp + .thumb_func _last_a_array_bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 str r12,[r10,r3,lsl #2] + .thumb_func _end_set_a_array_bits: ldr r4,[sp],#4 add r8,r6,#12 @@ -1302,6 +1358,7 @@ _end_set_a_array_bits: sto r6,r12,end_vector,9 b _mark_next_node + .thumb_func _mark_lazy_array: cmp sp,r11 blo _mark_array_using_reversal @@ -1328,6 +1385,7 @@ _mark_lazy_array: cmp r3,r4 bhs _last_lazy_array_bits + .thumb_func _mark_lazy_array_lp: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 @@ -1336,11 +1394,13 @@ _mark_lazy_array_lp: cmp r3,r4 blo _mark_lazy_array_lp + .thumb_func _last_lazy_array_bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 str r12,[r10,r3,lsl #2] + .thumb_func _end_set_lazy_array_bits: ldr r4,[r6,#4] add r8,r6,#12 @@ -1362,12 +1422,14 @@ _end_set_lazy_array_bits: sto r6,r12,end_vector,12 b _mark_next_node + .thumb_func _mark_array_using_reversal: mov r12,#0 str r12,[sp,#-4]! mov r9,#1 b __mark_node + .thumb_func _mark_strict_basic_array: ldr r4,[r6,#4] laol r12,INT+2,INT_o_2,8 @@ -1378,16 +1440,20 @@ _mark_strict_basic_array: otoa r12,BOOL_o_2,5 cmp r8,r12 beq _mark_strict_bool_array + .thumb_func _mark_strict_real_array: add r4,r4,r4 + .thumb_func _mark_strict_int_array: add r4,r4,#3 b _mark_basic_array_ + .thumb_func _mark_strict_bool_array: add r4,r4,#12+3 lsr r4,r4,#2 b _mark_basic_array_ + .thumb_func _mark_b_record_array: ldr r8,[r6,#4] sub r4,r4,#256 @@ -1395,11 +1461,13 @@ _mark_b_record_array: add r4,r4,#3 b _mark_basic_array_ + .thumb_func _mark_string_: ldr r4,[r6,#4] add r4,r4,#8+3 lsr r4,r4,#2 + .thumb_func _mark_basic_array_: ldr r12,[r10,r3,lsl #2] orr r12,r12,r9 @@ -1420,6 +1488,7 @@ _mark_basic_array_: cmp r3,r4 bhs _last_string_bits + .thumb_func _mark_string_lp: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 @@ -1428,12 +1497,14 @@ _mark_string_lp: cmp r3,r4 blo _mark_string_lp + .thumb_func _last_string_bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 str r12,[r10,r3,lsl #2] b _mark_next_node + .thumb_func __end_mark_using_reversal: ldr r7,[sp],#4 tst r7,r7 @@ -1465,12 +1536,14 @@ __end_mark_using_reversal: .endif .ltorg + .thumb_func __mark_using_reversal: str r6,[sp,#-4]! mov r9,#1 ldr r6,[r6] b __mark_node + .thumb_func __mark_arguments: ldr r4,[r6] tst r4,#2 @@ -1520,6 +1593,7 @@ fits__in__word__1: tst r7,r12 bne __shared_argument_part + .thumb_func __no_shared_argument_part: ldr r12,[r10,r3,lsl #2] orr r12,r12,r7 @@ -1568,6 +1642,7 @@ __mark_hnf_1: ldr r7,[r12,r3,lsl #2] orr r7,r7,#1 str r7,[r12,r3,lsl #2] + .thumb_func __shared_argument_part: ldr r8,[r6] str r9,[r6] @@ -1675,6 +1750,7 @@ __mark_tuple_selector_node_2: str r6,[r8] b __mark_node + .thumb_func __small_tuple_or_record: .ifdef PIC ldr r12,[r4,#-8] @@ -1736,6 +1812,7 @@ __mark_record_selector_node_1: tst r8,r12 bne __mark_no_selector_2 + .thumb_func __small_record: .ifdef PIC ldr r12,[r4,#-8] @@ -1800,6 +1877,7 @@ __mark_strict_record_selector_node_1: tst r8,r12 bne __mark_no_selector_2 + .thumb_func __select_from_small_record: .ifdef PIC ldr r4,[r4,#-8] @@ -1851,6 +1929,7 @@ __mark_strict_record_selector_node_5: str r4,[r6] b __mark_node + .thumb_func __mark_indirection_node: ldr r6,[r6] b __mark_node @@ -1880,6 +1959,7 @@ __mark_record_2_c: add r9,r6,#4 mov r6,r8 + .thumb_func __mark_node: sub r7,r6,r0 cmp r7,r1 @@ -1895,6 +1975,7 @@ __mark_node: tst r8,r12 beq __mark_arguments + .thumb_func __mark_next_node: tst r9,#3 bne __mark_parent @@ -1911,6 +1992,7 @@ __mark_next_node: orr r9,r9,r8 b __mark_node + .thumb_func __mark_parent: mov r3,r9 bics r9,r9,#3 @@ -1927,6 +2009,7 @@ __mark_parent: mov r9,r8 b __mark_next_node + .thumb_func __argument_part_parent: and r8,r8,#-4 mov r7,r9 @@ -1937,6 +2020,7 @@ __argument_part_parent: add r9,r8,#2-4 b __mark_node + .thumb_func __mark_lazy_node: ldr r8,[r4,#-4] tst r8,r8 @@ -1979,6 +2063,7 @@ __mark_closure_with_unboxed_arguments__2: mov r9,r7 b __mark_node + .thumb_func __mark_closure_with_unboxed_arguments: mov r4,r8 and r8,r8,#255 @@ -2029,6 +2114,7 @@ __mark_hnf_0: cmp r8,#33 blo ____small_int + .thumb_func __mark_bool_or_small_string: lsr r7,r7,#2 mov r12,#1 @@ -2045,6 +2131,7 @@ __mark_bool_or_small_string: str r7,[r12,r3,lsl #2] b __mark_next_node + .thumb_func ____small_int: lao r6,small_integers,2 otoa r6,small_integers,2 @@ -2071,12 +2158,14 @@ __no_char_3: add r6,r4,#ZERO_ARITY_DESCRIPTOR_OFFSET-2 b __mark_next_node + .thumb_func __mark_real_file_or_string: laol r12,__STRING__+2,__STRING___o_2,9 otoa r12,__STRING___o_2,9 cmp r4,r12 bls __mark_string_or_array + .thumb_func __mark_real_or_file: lsr r7,r7,#2 mov r12,#1 @@ -2096,6 +2185,7 @@ __mark_real_or_file: str r7,[r12,r3,lsl #2] b __mark_next_node + .thumb_func __mark__record: mov r12,#258/2 subs r8,r8,r12,lsl #1 @@ -2183,6 +2273,7 @@ __mark_record_3_aab: mov r6,r8 b __mark_node + .thumb_func __shared_record_argument_part: ldr r7,[r6,#4] @@ -2222,9 +2313,11 @@ __mark_record_1: sub r6,r6,#4 b __mark_bool_or_small_string + .thumb_func __mark_string_or_array: beq __mark_string_ + .thumb_func __mark_array: ldr r8,[r6,#8] cmp r8,#0 @@ -2242,6 +2335,7 @@ __mark_array: cmp r4,r8 beq __mark_a_record_array + .thumb_func __mark__ab__record__array: str r7,[sp,#-4]! str r3,[sp,#-4]! @@ -2291,16 +2385,19 @@ __mark__ab__record__array: add r7,r6,r4,lsl #2 b __mark_r_array + .thumb_func __mark_a_record_array: ldr r12,[r6,#4] mul r4,r12,r4 add r6,r6,#8 b __mark_lr_array + .thumb_func __mark_lazy_array: ldr r4,[r6,#4] add r6,r6,#8 + .thumb_func __mark_lr_array: lsr r7,r7,#2 mov r12,#1 @@ -2310,6 +2407,7 @@ __mark_lr_array: str r12,[r10,r3,lsl #2] add r7,r6,r4,lsl #2 sub r8,r7,r0 + .thumb_func __mark_r_array: lsr r8,r8,#7 @@ -2318,6 +2416,7 @@ __mark_r_array: add r3,r3,#1 + .thumb_func __mark_lazy_array_bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,#1 @@ -2326,6 +2425,7 @@ __mark_lazy_array_bits: cmp r3,r8 bls __mark_lazy_array_bits + .thumb_func __skip_mark_lazy_array_bits: add r2,r2,#3 add r2,r2,r4 @@ -2377,6 +2477,7 @@ __mark_array_length_0_1: mov r6,r8 b __mark_node + .thumb_func __mark_b_record_array: ldr r8,[r6,#4] sub r4,r4,#256 @@ -2384,6 +2485,7 @@ __mark_b_record_array: add r4,r4,#3 b __mark_basic_array + .thumb_func __mark_strict_basic_array: ldr r4,[r6,#4] laol r12,INT+2,INT_o_2,10 @@ -2394,21 +2496,26 @@ __mark_strict_basic_array: otoa r12,BOOL_o_2,6 cmp r8,r12 beq __mark__strict__bool__array + .thumb_func __mark__strict__real__array: add r4,r4,r4 + .thumb_func __mark__strict__int__array: add r4,r4,#3 b __mark_basic_array + .thumb_func __mark__strict__bool__array: add r4,r4,#12+3 lsr r4,r4,#2 b __mark_basic_array + .thumb_func __mark_string_: ldr r4,[r6,#4] add r4,r4,#8+3 lsr r4,r4,#2 + .thumb_func __mark_basic_array: lsr r7,r7,#2 mov r12,#1 @@ -2433,6 +2540,7 @@ __mark_basic_array: cmp r3,r4 bhs __last__string__bits + .thumb_func __mark_string_lp: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 @@ -2441,6 +2549,7 @@ __mark_string_lp: cmp r3,r4 blo __mark_string_lp + .thumb_func __last__string__bits: ldr r12,[r10,r3,lsl #2] orr r12,r12,r8 diff --git a/thumb2startup.s b/thumb2startup.s index 3e3cd8c..57dcb00 100644 --- a/thumb2startup.s +++ b/thumb2startup.s @@ -158,53 +158,71 @@ ZERO_ARITY_DESCRIPTOR_OFFSET = (-4) .p2align 2 .if MARK_GC + .thumb_func bit_counter: .long 0 + .thumb_func bit_vector_p: .long 0 + .thumb_func zero_bits_before_mark: .long 1 + .thumb_func n_free_words_after_mark: .long 1000 + .thumb_func n_last_heap_free_bytes: .long 0 + .thumb_func lazy_array_list: .long 0 + .thumb_func n_marked_words: .long 0 + .thumb_func end_stack: .long 0 .if ADJUST_HEAP_SIZE + .thumb_func bit_vector_size: .long 0 .endif .endif + .thumb_func caf_list: .long 0 .globl caf_listp .hidden caf_listp + .thumb_func caf_listp: .long 0 + .thumb_func zero_length_string: .long __STRING__+2 .long 0 + .thumb_func true_string: .long __STRING__+2 .long 4 + .thumb_func true_c_string: .ascii "True" .byte 0,0,0,0 + .thumb_func false_string: .long __STRING__+2 .long 5 + .thumb_func false_c_string: .ascii "False" .byte 0,0,0 + .thumb_func file_c_string: .ascii "File" .byte 0,0,0,0 + .thumb_func garbage_collect_flag: .byte 0 .byte 0,0,0 @@ -215,15 +233,19 @@ garbage_collect_flag: out_of_memory_string_1: .ascii "Not enough memory to allocate heap and stack" .byte 10,0 + .thumb_func printf_int_string: .ascii "%d" .byte 0 + .thumb_func printf_real_string: .ascii "%.15g" .byte 0 + .thumb_func printf_string_string: .ascii "%s" .byte 0 + .thumb_func printf_char_string: .ascii "%c" .byte 0 @@ -240,6 +262,7 @@ heap_use_after_gc_string_1: heap_use_after_gc_string_2: .ascii " Bytes." .byte 10,0 + .thumb_func stack_overflow_string: .ascii "Stack overflow." .byte 10,0 @@ -255,18 +278,22 @@ time_string_2: time_string_4: .ascii " Total: " .byte 0 + .thumb_func high_index_string: .ascii "Index too high in UPDATE string." .byte 10,0 + .thumb_func low_index_string: .ascii "Index negative in UPDATE string." .byte 10,0 IO_error_string: .ascii "IO error: " .byte 0 + .thumb_func new_line_string: .byte 10,0 + .thumb_func sprintf_time_string: .ascii "%d.%02d" .byte 0 @@ -282,6 +309,7 @@ marked_gc_string_1: .ifdef LINUX .globl m_system .endif + .thumb_func m_system: .long 6 .ascii "System" @@ -290,6 +318,7 @@ m_system: .long m_system .endif + .thumb_func garbage_collector_name: .long 0 .asciz "garbage_collector" @@ -297,6 +326,7 @@ garbage_collector_name: .endif .ifdef DLL + .thumb_func start_address: .long 0 .endif @@ -487,6 +517,7 @@ start_address: .comm free_finalizer_list,4 .endif + .thumb_func abc_main: str lr,[sp,#-4]! @@ -528,15 +559,18 @@ abc_main: bl __start .endif + .thumb_func exit: mov r12,pc str r12,[sp,#-4]! bl exit_clean + .thumb_func init_error: ldmia sp!,{r4-r11,pc} .globl clean_init + .thumb_func clean_init: stmdb sp!,{r4-r11,lr} @@ -573,11 +607,13 @@ clean_init: mov r4,#1 b exit_dll_init + .thumb_func init_dll_error: mov r4,#0 b exit_dll_init .globl clean_fini + .thumb_func clean_fini: stmdb sp!,{r4-r11,lr} @@ -592,9 +628,11 @@ clean_fini: str r12,[sp,#-4]! bl exit_clean + .thumb_func exit_dll_init: ldmia sp!,{r4-r11,pc} + .thumb_func init_clean: add r4,sp,#128 lao r12,ab_stack_size,0 @@ -714,6 +752,7 @@ init_clean: laol r3,INT+2,INT_o_2,0 otoa r3,INT_o_2,0 + .thumb_func make_small_integers_lp: str r3,[r6] str r4,[r6,#4] @@ -728,6 +767,7 @@ make_small_integers_lp: laol r3,CHAR+2,CHAR_O_2,0 otoa r3,CHAR_O_2,0 + .thumb_func make_static_characters_lp: str r3,[r6] str r4,[r6,#4] @@ -827,6 +867,7 @@ no_mark9: cmp r4,r8 bge too_large_or_too_small mov r8,r4 + .thumb_func too_large_or_too_small: .endif @@ -880,6 +921,7 @@ no_memory_3: mov r0,#1 ldr pc,[sp],#4 + .thumb_func exit_clean: mov r12,pc str r12,[sp,#-4]! @@ -932,6 +974,7 @@ exit_clean: mov r0,#10 bl ew_print_char + .thumb_func no_print_execution_time: lao r0,stack_mbp,1 ldo r0,r0,stack_mbp,1 @@ -949,6 +992,7 @@ no_print_execution_time: ldr pc,[sp],#4 + .thumb_func __driver: lao r8,flags,5 ldo r8,r8,flags,5 @@ -1051,6 +1095,7 @@ __driver: .endif .ltorg + .thumb_func print_time: @ divide by 1000 ldr r12,=274877907 @@ -1110,19 +1155,23 @@ print_time: .endif ldr pc,[sp],#4 + .thumb_func print_sc: lao r12,basic_only,1 ldo r8,r12,basic_only,1 cmp r8,#0 bne end_print + .thumb_func print: mov r0,r4 bl w_print_string + .thumb_func end_print: ldr pc,[sp],#4 + .thumb_func dump: mov r12,pc str r12,[sp,#-4]! @@ -1164,10 +1213,12 @@ DtoAC_string_a2: add r6,r8,#4 b build_string + .thumb_func print_symbol: mov r3,#0 b print_symbol_2 + .thumb_func print_symbol_sc: lao r12,basic_only,2 ldo r3,r12,basic_only,2 @@ -1207,6 +1258,7 @@ printD_: add r8,r12,r3 b print_string_a2 + .thumb_func print_record: ldr r8,[r4,#-6] @.ifdef PIC @@ -1216,19 +1268,23 @@ print_record: .endif b print_string_a2 + .thumb_func end_print_symbol: ldr pc,[sp],#4 + .thumb_func print_int_node: ldr r0,[r6,#4] bl w_print_int ldr pc,[sp],#4 + .thumb_func print_int: mov r0,r4 bl w_print_int ldr pc,[sp],#4 + .thumb_func print_char_denotation: tst r3,r3 bne print_char_node @@ -1247,45 +1303,53 @@ print_char_denotation: ldr pc,[sp],#4 + .thumb_func print_char_node: ldr r0,[r6,#4] bl w_print_char ldr pc,[sp],#4 + .thumb_func print_char: str r4,[sp,#-4]! bl w_print_char add sp,sp,#4 ldr pc,[sp],#4 + .thumb_func print_bool: ldsb r6,[r6,#4] tst r6,r6 beq print_false + .thumb_func print_true: lao r0,true_c_string,0 otoa r0,true_c_string,0 bl w_print_string 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 pc,[sp],#4 + .thumb_func print_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 .endif b print_real_ + .thumb_func print_real_node: .ifdef SOFT_FP_CC ldrd r0,r1,[r6,#4] .else vldr.f64 d0,[r6,#4] .endif + .thumb_func print_real_: mov r11,sp @bic sp,sp,#7 @ TODO @@ -1299,19 +1363,23 @@ print_string_a2: bl w_print_text ldr pc,[sp],#4 + .thumb_func print__chars__sc: lao r12,basic_only,3 ldo r8,r12,basic_only,3 cmp r8,#0 bne no_print_chars + .thumb_func print__string__: ldr r1,[r6,#4] add r0,r6,#8 bl w_print_text + .thumb_func no_print_chars: ldr pc,[sp],#4 + .thumb_func push_a_r_args: str r10,[sp,#-4]! @@ -1330,6 +1398,7 @@ push_a_r_args: add r12,r6,#12 add r6,r12,r3,lsl #2 subs r10,r10,#1 + .thumb_func mul_array_size_lp: add r6,r6,r4 subs r10,r10,#1 @@ -1337,9 +1406,11 @@ mul_array_size_lp: add r10,r6,r7,lsl #2 b push_a_elements + .thumb_func push_a_elements_lp: ldr r4,[r6,#-4]! str r4,[r9],#4 + .thumb_func push_a_elements: subs r3,r3,#1 bcs push_a_elements_lp @@ -1350,15 +1421,18 @@ push_a_elements: ldr r8,[sp],#4 b push_b_elements + .thumb_func push_b_elements_lp: ldr r12,[r6,#-4]! str r12,[sp,#-4]! + .thumb_func push_b_elements: subs r7,r7,#1 bcs push_b_elements_lp mov pc,r8 + .thumb_func push_t_r_args: ldr r8,[sp],#4 @@ -1381,9 +1455,11 @@ push_t_r_args: ldr r7,[r6,#4] add r12,r7,#-4 add r7,r12,r4,lsl #2 + .thumb_func small_record: b push_r_b_elements + .thumb_func push_r_b_elements_lp: subs r4,r4,#1 bne not_first_arg_b @@ -1391,9 +1467,11 @@ push_r_b_elements_lp: ldr r12,[r6] str r12,[sp,#-4]! b push_r_b_elements + .thumb_func not_first_arg_b: ldr r12,[r7,#-4]! str r12,[sp,#-4]! + .thumb_func push_r_b_elements: subs r3,r3,#1 bcs push_r_b_elements_lp @@ -1404,6 +1482,7 @@ push_r_b_elements: str r12,[sp,#-4]! b push_r_a_elements + .thumb_func push_r_a_elements_lp: subs r4,r4,#1 bne not_first_arg_a @@ -1411,9 +1490,11 @@ push_r_a_elements_lp: ldr r8,[r6] str r8,[r9],#4 b push_r_a_elements + .thumb_func not_first_arg_a: ldr r8,[r7,#-4]! str r8,[r9],#4 + .thumb_func push_r_a_elements: subs r3,r3,#1 bcs push_r_a_elements_lp @@ -1464,12 +1545,14 @@ ItoAC: sub r4,r6,r12 b sprintf_buffer_to_string + .thumb_func int_to_string: tst r4,r4 bpl no_minus mov r12,#45 strb r12,[r6],#1 neg r4,r4 + .thumb_func no_minus: add r8,r6,#12 @@ -1477,6 +1560,7 @@ no_minus: ldr r2,=0xcccccccd + .thumb_func calculate_digits: cmp r4,#10 blo last_digit @@ -1492,15 +1576,19 @@ calculate_digits: strb r3,[r8],#1 b calculate_digits + .thumb_func last_digit: tst r4,r4 beq no_zero + .thumb_func zero_digit: add r4,r4,#48 strb r4,[r8],#1 + .thumb_func no_zero: add r7,r6,#12 + .thumb_func reverse_digits: ldrb r3,[r8,#-1]! strb r3,[r6],#1 @@ -1519,6 +1607,7 @@ reverse_digits: bl sprintf .endif + .thumb_func return_sprintf_buffer: .if USE_CLIB lao r0,sprintf_buffer,5 @@ -1528,6 +1617,7 @@ return_sprintf_buffer: .else laol r4,sprintf_buffer-1,sprintf_buffer_o_m1,0 otoa r4,sprintf_buffer_o_m1,0 + .thumb_func skip_characters: ldrb r12,[r4,#1]! tst r12,r12 @@ -1539,9 +1629,11 @@ skip_characters: .endif .if MY_ITOS + .thumb_func sprintf_buffer_to_string: lao r6,sprintf_buffer,7 otoa r6,sprintf_buffer,7 + .thumb_func build_string: .endif add r3,r4,#3 @@ -1635,6 +1727,7 @@ eqD_false: @ the timer @ + .thumb_func init_timer: sub sp,sp,#20 mov r0,sp @@ -1656,6 +1749,7 @@ init_timer: ldr pc,[sp],#4 + .thumb_func get_time_diff: sub sp,sp,#20 mov r0,sp @@ -1672,6 +1766,7 @@ get_time_diff: subs r4,r4,r7 ldr pc,[sp],#4 + .thumb_func add_execute_time: mov r12,pc str r12,[sp,#-4]! @@ -1679,12 +1774,14 @@ add_execute_time: lao r6,execute_time,3 otoa r6,execute_time,3 + .thumb_func add_time: ldr r12,[r6] add r4,r4,r12 str r4,[r6] ldr pc,[sp],#4 + .thumb_func add_garbage_collect_time: mov r12,pc str r12,[sp,#-4]! @@ -1911,6 +2008,7 @@ collect_0_: lao r12,n_free_words_after_mark,0 ldo r2,r12,n_free_words_after_mark,0 + .thumb_func scan_bits: ldr r12,[r6] cmp r3,r12 @@ -1921,6 +2019,7 @@ scan_bits: b end_scan + .thumb_func zero_bits: add r7,r6,#4 add r6,r6,#4 @@ -1928,6 +2027,7 @@ zero_bits: bne skip_zero_bits_lp1 b end_bits + .thumb_func skip_zero_bits_lp: cmp r4,#0 bne end_zero_bits @@ -1942,6 +2042,7 @@ skip_zero_bits_lp1: subs r4,r6,r7 b end_bits2 + .thumb_func end_zero_bits: sub r4,r6,r7 lsl r4,r4,#3 @@ -1951,6 +2052,7 @@ end_zero_bits: cmp r4,r9 blo scan_bits + .thumb_func found_free_memory: lao r12,bit_counter,1 sto r8,r12,bit_counter,1 @@ -1978,6 +2080,7 @@ found_free_memory: ldmia sp!,{r0-r4,pc} + .thumb_func end_bits: sub r4,r6,r7 add r4,r4,#4 @@ -1987,6 +2090,7 @@ end_bits2: cmp r4,r9 bhs found_free_memory + .thumb_func end_scan: ldr r9,[sp],#4 lao r12,bit_counter,2 @@ -1994,6 +2098,7 @@ end_scan: lao r12,n_free_words_after_mark,2 sto r2,r12,n_free_words_after_mark,2 + .thumb_func no_scan: .endif @@ -2029,6 +2134,7 @@ no_mark3: ldmia sp!,{r0-r4,pc} + .thumb_func collect: mov r12,pc str r12,[sp,#-4]! @@ -2063,6 +2169,7 @@ collect: otoa r0,garbage_collect_string_3,0 bl ew_print_string + .thumb_func no_print_stack_sizes: lao r12,stack_p,2 ldo r4,r12,stack_p,2 @@ -2132,6 +2239,7 @@ no_print_stack_sizes: bl zero_bit_vector b end_zero_bit_vector + .thumb_func zero_all: lao r12,heap_copied_vector_size,3 ldo r4,r12,heap_copied_vector_size,3 @@ -2140,6 +2248,7 @@ zero_all: str r12,[sp,#-4]! bl zero_bit_vector + .thumb_func end_zero_bit_vector: .include "thumb2copy.s" @@ -2177,6 +2286,7 @@ end_zero_bit_vector: bhs no_mark_scan @ b no_mark_scan + .thumb_func switch_to_mark_scan: lao r12,heap_size_33,2 ldo r4,r12,heap_size_33,2 @@ -2191,6 +2301,7 @@ switch_to_mark_scan: cmp r6,r12 bcc vector_at_begin + .thumb_func vector_at_end: lao r12,heap_p3,2 sto r3,r12,heap_p3,2 @@ -2208,6 +2319,7 @@ vector_at_end: sto r3,r12,extra_heap_size,1 b switch_to_mark_scan_2 + .thumb_func vector_at_begin: lao r12,heap_vector,3 sto r3,r12,heap_vector,3 @@ -2268,6 +2380,7 @@ switch_to_mark_scan_2: .else b end_garbage_collect .endif + .thumb_func no_mark_scan: @ exchange the semi_spaces lao r12,heap_p1,5 @@ -2302,6 +2415,7 @@ no_mark_scan: add sp,sp,#8 ldr r4,[sp],#4 + .thumb_func no_pages: .endif @@ -2344,6 +2458,7 @@ no_small_heap1: lsl r4,r4,#2 .endif + .thumb_func end_garbage_collect: .if WRITE_HEAP lao r12,heap_end_write_heap,1 @@ -2351,6 +2466,7 @@ end_garbage_collect: lao r12,d3_flag_write_heap,1 mov r11,#0 sto r11,r12,d3_flag_write_heap,1 + .thumb_func end_garbage_collect_: .endif @@ -2374,6 +2490,7 @@ end_garbage_collect_: otoa r0,heap_use_after_gc_string_2,0 bl ew_print_string + .thumb_func no_heap_use_message: .if FINALIZERS @@ -2474,6 +2591,7 @@ gc1: ldr r8,[sp],#4 ldr r7,[sp],#4 ldr r6,[sp],#4 + .thumb_func no_write_heap: .endif @@ -2597,10 +2715,12 @@ no_write_heap: .endif .if FINALIZERS + .thumb_func call_finalizers: lao r12,free_finalizer_list,1 ldo r4,r12,free_finalizer_list,1 + .thumb_func call_finalizers_lp: laol r12,__Nil-4,__Nil_o_m4,1 otoa r12,__Nil_o_m4,1 @@ -2616,6 +2736,7 @@ call_finalizers_lp: add sp,sp,#4 ldr r4,[sp],#4 b call_finalizers_lp + .thumb_func end_call_finalizers: lao r12,free_finalizer_list,2 laol r11,__Nil-4,__Nil_o_m4,2 @@ -2625,6 +2746,7 @@ end_call_finalizers: .endif .if WRITE_HEAP + .thumb_func copy_to_compact_with_alloc_in_extra_heap: lao r12,heap2_begin_and_end,2 ldo r6,r12,heap2_begin_and_end,2 @@ -2644,6 +2766,7 @@ out_of_memory_4: otoa r8,out_of_memory_string_4,0 b print_error + .thumb_func zero_bit_vector: eor r7,r7,r7 tst r4,#1 @@ -2673,6 +2796,7 @@ zero_bits1_5: bhs zero_bits1_4 ldr pc,[sp],#4 + .thumb_func reorder: str r9,[sp,#-4]! str r8,[sp,#-4]! @@ -2690,6 +2814,7 @@ reorder: str r4,[sp,#-4]! b st_reorder_lp + .thumb_func reorder_lp: ldr r8,[r6] ldr r9,[r7,#-4] @@ -2703,13 +2828,16 @@ reorder_lp: ldr r4,[sp] ldr r12,[sp,#12] add r6,r6,r12 + .thumb_func next_b_in_element: subs r3,r3,#1 bne next_a_in_element ldr r3,[sp,#4] ldr r12,[sp,#8] subs r7,r7,r12 + .thumb_func next_a_in_element: + .thumb_func st_reorder_lp: cmp r7,r6 bhi reorder_lp @@ -2725,6 +2853,7 @@ st_reorder_lp: @ the sliding compacting garbage collector @ + .thumb_func compacting_collector: @ zero all mark bits @@ -2794,6 +2923,7 @@ zero_bits_5: tst r12,#64 beq no_mark5 .endif + .thumb_func no_zero_bits: lao r12,n_last_heap_free_bytes,0 ldo r4,r12,n_last_heap_free_bytes,0 @@ -2834,6 +2964,7 @@ no_zero_bits: bls no_smaller_heap b compact_gc + .thumb_func no_smaller_heap: .endif @@ -2845,6 +2976,7 @@ no_smaller_heap: lto n_free_words_after_mark,4 .endif + .thumb_func compact_gc: lao r12,zero_bits_before_mark,1 mov r11,#1 @@ -2893,6 +3025,7 @@ no_mark5: ldo r12,r12,heap_size,7 cmp r4,r12 bcc out_of_memory_4 + .thumb_func not_out_of_memory: .if MARK_GC || COMPACT_GC_ONLY @@ -3009,6 +3142,7 @@ vector_at_end_2: stob r11,r12,garbage_collect_flag,8 .endif + .thumb_func no_copy_garbage_collection: mov r12,pc str r12,[sp,#-4]! @@ -3023,6 +3157,7 @@ no_copy_garbage_collection: add r4,r4,r3,lsl #2 b end_garbage_collect + .thumb_func stack_overflow: mov r12,pc str r12,[sp,#-4]! @@ -3048,10 +3183,12 @@ IO_error: b halt + .thumb_func print_error: mov r0,r8 bl ew_print_string + .thumb_func halt: lao r12,halt_sp,3 ldo sp,r12,halt_sp,3 @@ -3109,7 +3246,9 @@ halt: .endif .ltorg + .thumb_func e__system__eaind: + .thumb_func eval_fill: str r6,[r9],#4 mov r6,r7 @@ -3138,7 +3277,9 @@ eval_fill: .long e__system__dind .endif .long -2 + .thumb_func e__system__nind: + .thumb_func __indirection: ldr r7,[r6,#4] ldr r4,[r7] @@ -3320,6 +3461,7 @@ eval_upd_6: eval_upd_7: mov r4,#0 mov r3,#20 + .thumb_func eval_upd_n: lao r12,e__system__nind,7 otoa r12,e__system__nind,7 @@ -3336,6 +3478,7 @@ eval_upd_n: str r3,[r9,#12] add r9,r9,#16 + .thumb_func eval_upd_n_lp: ldr r3,[r2,#-4]! str r3,[r9],#4 @@ -3701,6 +3844,7 @@ cat_string_11: gc_3: bl collect_2 b gc_r_3 + .thumb_func empty_string: lao r6,zero_length_string,0 otoa r6,zero_length_string,0 @@ -3817,6 +3961,7 @@ updateAC_after_copy_lp: gc_5: bl collect_1 b r_gc_5 + .thumb_func update_string_error: lao r8,high_index_string,0 otoa r8,high_index_string,0 @@ -3853,6 +3998,7 @@ equal_string_1: add r7,r7,#4 subs r4,r4,#1 bne equal_string_1 + .thumb_func equal_string_b: tst r3,#2 beq equal_string_2 @@ -3869,9 +4015,11 @@ equal_string_2: ldrb r12,[r7] cmp r3,r12 bne equal_string_ne + .thumb_func equal_string_eq: mov r4,#1 ldr pc,[sp],#4 + .thumb_func equal_string_ne: mov r4,#0 ldr pc,[sp],#4 @@ -3887,9 +4035,11 @@ cmpAC: bhi cmp_string_more mov r4,#0 b cmp_string_chars + .thumb_func cmp_string_more: mov r4,#1 b cmp_string_chars + .thumb_func cmp_string_less: mov r4,#-1 mov r3,r8 @@ -3902,9 +4052,11 @@ cmp_string_1: bne cmp_string_ne4 add r7,r7,#4 add r6,r6,#4 + .thumb_func cmp_string_chars: subs r3,r3,#4 bcs cmp_string_1 + .thumb_func cmp_string_b: @ to do compare bytes using and instead of ldrb tst r3,#2 @@ -3926,6 +4078,7 @@ cmp_string_2: ldrb r12,[r6] cmp r8,r12 bne cmp_string_ne + .thumb_func cmp_string_eq: ldr pc,[sp],#4 cmp_string_ne4: @@ -3945,6 +4098,7 @@ cmp_string_ne4: ldrb r3,[r7,#3] ldrb r12,[r6,#3] cmp r3,r12 + .thumb_func cmp_string_ne: bhi cmp_string_r1 mov r4,#-1 @@ -3954,6 +4108,7 @@ cmp_string_r1: ldr pc,[sp],#4 .section .text.string_to_string_node,"ax" + .thumb_func string_to_string_node: ldr r8,[r6],#4 @@ -3964,6 +4119,7 @@ string_to_string_node: subs r5,r5,r12 blo string_to_string_node_gc + .thumb_func string_to_string_node_r: laol r12,__STRING__+2,__STRING___o_2,4 otoa r12,__STRING___o_2,4 @@ -3983,6 +4139,7 @@ string_to_string_node_4: mov r6,r8 ldr pc,[sp],#4 + .thumb_func string_to_string_node_gc: stmdb sp!,{r6,r8} bl collect_0 @@ -3994,6 +4151,7 @@ string_to_string_node_gc: .endif .section .text.int_array_to_node,"ax" + .thumb_func int_array_to_node: ldr r4,[r6,#-8] @@ -4001,6 +4159,7 @@ int_array_to_node: subs r5,r5,r12 blo int_array_to_node_gc + .thumb_func int_array_to_node_r: laol r12,__ARRAY__+2,__ARRAY___o_2,0 otoa r12,__ARRAY___o_2,0 @@ -4023,6 +4182,7 @@ int_array_to_node_4: ldr pc,[sp],#4 + .thumb_func int_array_to_node_gc: str r6,[sp,#-4]! bl collect_0 @@ -4035,6 +4195,7 @@ int_array_to_node_gc: .endif .section .text.real_array_to_node,"ax" + .thumb_func real_array_to_node: ldr r4,[r6,#-8] @@ -4042,6 +4203,7 @@ real_array_to_node: subs r5,r5,r12 blo real_array_to_node_gc + .thumb_func real_array_to_node_r: tst r10,#4 orr r10,r10,#4 @@ -4072,6 +4234,7 @@ real_array_to_node_4: ldr pc,[sp],#4 + .thumb_func real_array_to_node_gc: str r6,[sp,#-4]! bl collect_0 @@ -4263,6 +4426,7 @@ no_collect_4580: @ r4: number of elements, r3: element descriptor @ r2: element size, r1: element a size, a0:a_element-> a0: array + .thumb_func _create_r_array: mul r12,r4,r2 add r12,r12,#3 @@ -4451,10 +4615,12 @@ create_arrayBCI: str r4,[r10],#4 b st_filli_array + .thumb_func filli_array: str r4,[r10] str r4,[r10,#4] add r10,r10,#8 + .thumb_func st_filli_array: subs r3,r3,#1 bcs filli_array @@ -4490,16 +4656,19 @@ no_collect_4579: str r12,[r10,#8] add r10,r10,#12 b st_fillr_array + .thumb_func fillr_array: str r3,[r10] str r7,[r10,#4] add r10,r10,#8 + .thumb_func st_fillr_array: subs r4,r4,#1 bcs fillr_array ldr pc,[sp],#4 + .thumb_func create_array: add r12,r4,#3 subs r5,r5,r12 @@ -4803,6 +4972,7 @@ st_fillr5_array: bx lr + .thumb_func repl_args_b: cmp r4,#0 ble repl_args_b_1 @@ -4832,6 +5002,7 @@ repl_args_b_4: repl_args_b_1: ldr pc,[sp],#4 + .thumb_func push_arg_b: cmp r3,#2 blo push_arg_b_1 @@ -4845,6 +5016,7 @@ push_arg_b_1: ldr r6,[r6,r3,lsl #2] ldr pc,[sp],#4 + .thumb_func del_args: ldr r3,[r6] subs r3,r3,r4 @@ -4873,6 +5045,7 @@ del_args_2: del_args_3: subs r5,r5,r4 blo del_args_gc + .thumb_func del_args_r_gc: str r3,[r7] str r10,[r7,#8] @@ -4880,6 +5053,7 @@ del_args_r_gc: ldr r6,[r6,#8] str r8,[r7,#4] + .thumb_func del_args_copy_args: ldr r8,[r6],#4 str r8,[r10],#4 @@ -4888,11 +5062,13 @@ del_args_copy_args: ldr pc,[sp],#4 + .thumb_func del_args_gc: bl collect_2 b del_args_r_gc .section .text.sin_real,"ax" + .thumb_func sin_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4904,6 +5080,7 @@ sin_real: ldr pc,[sp],#4 .section .text.cos_real,"ax" + .thumb_func cos_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4915,6 +5092,7 @@ cos_real: ldr pc,[sp],#4 .section .text.tan_real,"ax" + .thumb_func tan_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4926,6 +5104,7 @@ tan_real: ldr pc,[sp],#4 .section .text.asin_real,"ax" + .thumb_func asin_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4937,6 +5116,7 @@ asin_real: ldr pc,[sp],#4 .section .text.acos_real,"ax" + .thumb_func acos_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4948,6 +5128,7 @@ acos_real: ldr pc,[sp],#4 .section .text.atan_real,"ax" + .thumb_func atan_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4959,6 +5140,7 @@ atan_real: ldr pc,[sp],#4 .section .text.ln_real,"ax" + .thumb_func ln_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4981,6 +5163,7 @@ log10_real: ldr pc,[sp],#4 .section .text.exp_real,"ax" + .thumb_func exp_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -4992,6 +5175,7 @@ exp_real: ldr pc,[sp],#4 .section .text.pow_real,"ax" + .thumb_func pow_real: .ifdef SOFT_FP_CC vmov r0,r1,d1 @@ -5008,6 +5192,7 @@ pow_real: ldr pc,[sp],#4 .section .text.entier_real,"ax" + .thumb_func entier_real: .ifdef SOFT_FP_CC vmov r0,r1,d0 @@ -5017,6 +5202,7 @@ entier_real: vmov d0,r0,r1 .endif + .thumb_func r_to_i_real: vcvtr.s32.f64 s0,d0 vmov r4,s0 -- cgit v1.2.3