diff options
Diffstat (limited to 'macho/pstartup.a')
-rw-r--r-- | macho/pstartup.a | 184 |
1 files changed, 117 insertions, 67 deletions
diff --git a/macho/pstartup.a b/macho/pstartup.a index bd2c6b7..90c323a 100644 --- a/macho/pstartup.a +++ b/macho/pstartup.a @@ -118,8 +118,8 @@ WRITE_HEAP = 0 WRITE_HEAP = 0 STDERR_TO_FILE = 1 .endif +NEW_DESCRIPTORS = 1 ; PROFILE = 0 -UNBOXED_CLOSURES = 1 MODULE_NAMES_IN_TIME_PROFILER = 1 @@ -129,7 +129,11 @@ MINIMUM_HEAP_SIZE = 8000 .if 1 DESCRIPTOR_ARITY_OFFSET = (-2) + .if NEW_DESCRIPTORS +ZERO_ARITY_DESCRIPTOR_OFFSET = (-4) + .else ZERO_ARITY_DESCRIPTOR_OFFSET = (-8) + .endif .else DESCRIPTOR_ARITY_OFFSET = (-8) ZERO_ARITY_DESCRIPTOR_OFFSET = (-12) @@ -607,7 +611,7 @@ _abc_main: .else addi sp,sp,64 .endif - cmpwi 0,o0,0 + cmpwi cr0,o0,0 beq no_memory_1 lea o1,heap_mbp @@ -633,7 +637,7 @@ _abc_main: .endif addi sp,sp,64 - cmpwi 0,o0,0 + cmpwi cr0,o0,0 beq no_memory_1 mr a4,o0 @@ -668,7 +672,7 @@ make_small_integers_lp: stw d1,0(a0) stw d0,4(a0) addi d0,d0,1 - cmpwi 0,d0,33 + cmpwi cr0,d0,33 addi a0,a0,8 bne make_small_integers_lp @@ -679,7 +683,7 @@ make_static_characters_lp: stw d1,0(a0) stw d0,4(a0) addi d0,d0,1 - cmpwi 0,d0,256 + cmpwi cr0,d0,256 addi a0,a0,8 bne make_static_characters_lp @@ -1074,7 +1078,7 @@ no_memory_1: print_sc: lea o0,basic_only lwz o1,0(o0) - cmpwi 0,o1,0 + cmpwi cr0,o1,0 bne end_print print_: mr o0,d0 @@ -1132,41 +1136,54 @@ print_symbol_sc: print_symbol_2: lwz d0,0(a0) - cmpw 0,int_reg,d0 + cmpw cr0,int_reg,d0 beq print_int_node - cmpw 0,char_reg,d0 + cmpw cr0,char_reg,d0 beq print_char_node - cmpw 0,bool_reg,d0 + cmpw cr0,bool_reg,d0 beq print_bool - cmpw 0,real_reg,d0 + cmpw cr0,real_reg,d0 beq print_real_node - cmpwi 0,d1,0 + cmpwi cr0,d1,0 bne end_print_symbol -printD_: lha d1,-2(d0) +printD_: + lha d1,-2(d0) + .if NEW_DESCRIPTORS + cmplwi cr0,d1,256 + bge print_record + + lhz d1,0(d0) + addi a2,d0,10 + add a2,a2,d1 + b print_string_a2 + +print_record: + lwz a2,-6(d0) + b print_string_a2 + .else addi a2,d0,-2 - cmplwi 0,d1,256 + cmplwi cr0,d1,256 bge print_record slwi d1,d1,3 sub a2,a2,d1 - .if 1 lhz d1,DESCRIPTOR_ARITY_OFFSET(a2) addi a2,a2,4 slwi d1,d1,3 add a2,a2,d1 b print_string_a2 - .endif print_record: lwz a2,-4(a2) b print_string_a2 + .endif end_print_symbol: lwz r0,0(sp) @@ -1212,13 +1229,13 @@ print_int: print_char: lea o0,basic_only lwz d1,0(o0) - cmpwi 0,d1,0 + cmpwi cr0,d1,0 bne print_char_node_bo b print_char_node_sc print_char_node: - cmpwi 0,d1,0 + cmpwi cr0,d1,0 lwz d0,4(a0) bne print_char_node_sc print_char_node_bo: @@ -1284,7 +1301,7 @@ print_char_node_sc: print_bool: lbz o0,7(a0) - cmpwi 0,o0,0 + cmpwi cr0,o0,0 beq print_false print_true: @@ -1362,7 +1379,7 @@ print_string_a2: print__chars__sc: lea o0,basic_only lwz d1,0(o0) - cmpwi 0,d1,0 + cmpwi cr0,d1,0 bne no_print_chars print__string__: @@ -1473,16 +1490,26 @@ eprint__string__: .text ; __TEXT.eprintD: -eprintD: andi. r0,d0,2 +eprintD: + andi. r0,d0,2 bne eprintD_ mr a2,d0 b eprint_string_a2 -eprintD_: lha d1,-2(d0) +eprintD_: + lha d1,-2(d0) + .if NEW_DESCRIPTORS + cmplwi cr0,d1,256 + bge eprint_record + + lhz d1,0(d0) + addi a2,d0,10 + add a2,a2,d1 + .else addi a2,d0,-2 - cmplwi 0,d1,256 + cmplwi cr0,d1,256 bge eprint_record slwi d1,d1,3 @@ -1492,10 +1519,15 @@ eprintD_: lha d1,-2(d0) addi a2,a2,4 slwi d1,d1,3 add a2,a2,d1 + .endif b eprint_string_a2 eprint_record: + .if NEW_DESCRIPTORS + lwz a2,-6(d0) + .else lwz a2,-4(a2) + .endif eprint_string_a2: lwz o1,0(a2) @@ -1533,20 +1565,30 @@ eprint_string_a2: .text ; __TEXT.DtoAC: -DtoAC: lha d1,-2(d0) +DtoAC: + lha d1,-2(d0) + .if NEW_DESCRIPTORS + cmplwi cr0,d1,256 + bge DtoAC_record + + lhz d1,0(d0) + addi a0,d0,10 + add a0,a0,d1 + .else addi a0,d0,-2 - cmplwi 0,d1,256 + cmplwi cr0,d1,256 bge DtoAC_record slwi d1,d1,3 bsub a0,d1 - .if 1 + lhz d1,DESCRIPTOR_ARITY_OFFSET(a0) baddi a0,4 slwi d1,d1,3 badd a0,d1 .endif + DtoAC_a0: lwz d2,0(a0) mr a2,a0 @@ -1585,7 +1627,11 @@ DtoAC_gc: mflr r0 b DtoAC_r_gc DtoAC_record: + .if NEW_DESCRIPTORS + lwz a0,-6(d0) + .else lwz a0,-4(a0) + .endif b DtoAC_a0 .text @@ -1648,7 +1694,7 @@ push_t_r_args: sub d2,d3,d1 slwi d4,d3,2 - cmplwi 0,d3,2 + cmplwi cr0,d3,2 add a1,a0,d4 ble small_record @@ -1757,7 +1803,7 @@ RtoAC: ItoAC: .if MY_ITOS lea a0,sprintf_buffer - cmpwi 0,d0,0 + cmpwi cr0,d0,0 bge no_minus li o0,45 @@ -1770,7 +1816,7 @@ no_minus: beq zero_digit calculate_digits: - cmplwi 0,d0,10 + cmplwi cr0,d0,10 blt last_digit #if 1 @@ -1797,11 +1843,10 @@ calculate_digits: stb a1,0(a2) addi a2,a2,1 - b calculate_digits last_digit: - cmpwi 0,d0,0 + cmpwi cr0,d0,0 beq no_zero zero_digit: addi d0,d0,48 @@ -1812,7 +1857,7 @@ no_zero: reverse_digits: lbzu d1,-1(a2) - cmpw 0,a2,a1 + cmpw cr0,a2,a1 stb d1,0(a0) addi a0,a0,1 bne reverse_digits @@ -1896,19 +1941,19 @@ D_to_S_cp_str_2: eqD: lwz d0,0(a0) lwz o0,0(a1) - cmpw 0,d0,o0 + cmpw cr0,d0,o0 bne eqD_false - cmpw 0,d0,int_reg + cmpw cr0,d0,int_reg beq eqD_INT - cmpw 0,d0,char_reg + cmpw cr0,d0,char_reg beq eqD_CHAR - cmpw 0,d0,bool_reg + cmpw cr0,d0,bool_reg beq eqD_BOOL - cmpw 0,d0,real_reg + cmpw cr0,d0,real_reg beq eqD_REAL li d0,-1 @@ -1921,7 +1966,7 @@ eqD_CHAR: eqD_INT: lwz d1,4(a0) lwz o0,4(a1) li d0,0 - cmpw 0,d1,o0 + cmpw cr0,d1,o0 mfcr d0 srwi d0,d0,31-2 @@ -1934,7 +1979,7 @@ eqD_INT: lwz d1,4(a0) eqD_BOOL: lbz d1,7(a0) lbz o0,7(a1) li d0,0 - cmpw 0,d1,o0 + cmpw cr0,d1,o0 mfcr d0 srwi d0,d0,31-2 @@ -2485,7 +2530,7 @@ no_mark3: stw d6,24(sp) extsb o0,o0 - cmpwi 0,o0,0 + cmpwi cr0,o0,0 ble collect subi o0,o0,2 @@ -2769,7 +2814,7 @@ switch_to_mark_scan_2: li o1,1 stb o1,0(o0) - cmpwi 0,d7,0 + cmpwi cr0,d7,0 bge end_garbage_collect li o1,-1 @@ -3178,7 +3223,7 @@ compacting_collector: lea o0,zero_bits_before_mark li g0,0 lwz o1,0(o0) - cmpwi 0,o1,0 + cmpwi cr0,o1,0 beq no_zero_bits stw g0,0(o0) @@ -3379,7 +3424,7 @@ no_mark6: lwz o1,0(o0) slwi d1,d1,5 sub d1,d1,o1 - cmpw 0,d0,d1 + cmpw cr0,d0,d1 ble no_copy_garbage_collection ; b no_copy_garbage_collection @@ -3423,7 +3468,7 @@ no_mark6: lwz d0,0(o0) lea o0,heap_vector lwz o1,0(o0) - cmpw 0,d0,o1 + cmpw cr0,d0,o1 ble vector_at_end_2 lea o0,heap_vector @@ -3527,10 +3572,6 @@ print_error: .endif halt: - - lea o0,_halt_sp - lwz sp,0(o0) - .if PROFILE mflr r0 stwu r0,-4(sp) @@ -3541,10 +3582,13 @@ halt: .if EXCEPTIONS lea o0,exception_info lwz o0,0(o0) - cmpwi 0,o0,0 + cmpwi cr0,o0,0 bne e__Exceptions__sraise__exception .endif + lea o0,halt_sp + lwz sp,0(o0) + .if 0 lea o0,_flags lwz d0,0(o0) @@ -4250,19 +4294,19 @@ empty_string: sliceAC: lwz d2,4-NODE_POINTER_OFFSET(a0) addi a2,a0,4-NODE_POINTER_OFFSET - cmpwi 0,d1,0 + cmpwi cr0,d1,0 bge slice_string_1 li d1,0 slice_string_1: - cmpw 0,d1,d2 + cmpw cr0,d1,d2 bge empty_string - cmpw 0,d0,d1 + cmpw cr0,d0,d1 addi d0,d0,1 blt empty_string - cmpw 0,d0,d2 + cmpw cr0,d0,d2 ble slice_string_2 mr d0,d2 @@ -4349,7 +4393,7 @@ gc_5: mflr r0 update_string_error: lea o0,high_index_string - cmpwi 0,d1,0 + cmpwi cr0,d1,0 bge print_error lea o0,low_index_string @@ -4362,7 +4406,7 @@ update_string_error_2: eqAC: lwzu d0,4-NODE_POINTER_OFFSET(a0) lwzu o0,4-NODE_POINTER_OFFSET(a1) - cmpw 0,d0,o0 + cmpw cr0,d0,o0 bne equal_string_ne andi. d1,d0,3 @@ -4738,7 +4782,7 @@ no_collect_4579: addi a0,a6,4+NODE_POINTER_OFFSET stw o0,4(a6) - cmpwi 0,d0,0 + cmpwi cr0,d0,0 stw d0,8(a6) stwu real_reg,12(a6) @@ -4801,7 +4845,7 @@ no_collect_4581: stw o0,4(a6) stw d0,8(a6) stwu d1,12(a6) - cmpwi 0,d3,0 + cmpwi cr0,d3,0 lwz r0,0(sp) addi sp,sp,4 @@ -4867,7 +4911,7 @@ r_array_2_bb: b st_fillr2_array st_fillr2_array: - cmpwi 0,d0,0 + cmpwi cr0,d0,0 beq skip_fillr2_array_1 mtctr d0 @@ -4896,7 +4940,7 @@ no_collect_4583: stw d0,8(a6) stwu d1,12(a6) - cmpwi 0,d3,0 + cmpwi cr0,d3,0 lwz r0,0(sp) addi a2,sp,4 @@ -4918,7 +4962,7 @@ copy_a_to_b_lp3: r_array_3: lwz d1,0(sp) - cmpwi 0,d0,0 + cmpwi cr0,d0,0 lwz d2,4(sp) lwz d3,8(sp) @@ -4952,7 +4996,7 @@ no_collect_4584: stw d0,8(a6) stwu d1,12(a6) - cmpwi 0,d3,0 + cmpwi cr0,d3,0 lwz r0,0(sp) addi a2,sp,4 @@ -4974,7 +5018,7 @@ copy_a_to_b_lp4: r_array_4: lwz d1,0(sp) lwz d2,4(sp) - cmpwi 0,d0,0 + cmpwi cr0,d0,0 lwz d3,8(sp) lwz d4,12(sp) @@ -5015,7 +5059,7 @@ no_collect_4585: stw d0,8(a6) stwu d1,12(a6) - cmpwi 0,d3,0 + cmpwi cr0,d3,0 lwz r0,0(sp) addi a2,sp,4 @@ -5308,6 +5352,7 @@ _st_fillr5_array: bge _fillr5_array_1 blr + .if !NEW_DESCRIPTORS .text ; __TEXT.yet_args_needed: @@ -5479,12 +5524,13 @@ gc_r_24: gc_24: mflr r0 bl collect_2 b gc_r_24 + .endif .text ; __TEXT.repl_args_b: repl_args_b: - cmpwi 0,d0,0 + cmpwi cr0,d0,0 ble repl_args_b_1 subic. d0,d0,1 @@ -5506,7 +5552,7 @@ repl_args_b_3: lwzu o0,-4(a1) addi a4,a4,4 stw o0,0-4(a4) - cmpwi 0,d0,0 + cmpwi cr0,d0,0 subi d0,d0,1 bne repl_args_b_3 repl_args_b_4: @@ -5522,11 +5568,11 @@ repl_args_b_1: ; __TEXT.push_arg_b: push_arg_b: - cmplwi 0,d1,2 + cmplwi cr0,d1,2 blt push_arg_b_1 bne push_arg_b_2 - cmpw 0,d1,d0 + cmpw cr0,d1,d0 beq push_arg_b_1 push_arg_b_2: lwz a0,8(a0) @@ -5605,7 +5651,7 @@ del_args_gc: o__S_P2: lwz d0,0(a0) lha d0,-2(d0) - cmpwi 0,d0,2 + cmpwi cr0,d0,2 lwz a0,8(a0) beq o__S_P2_2 lwz a0,0(a0) @@ -6094,6 +6140,10 @@ entier_real_2: addi sp,sp,4 blr + .if NEW_DESCRIPTORS +#include "pap.a" + .endif + .picsymbol_stub L_sin$stub: .indirect_symbol _sin |