summaryrefslogblamecommitdiff
path: root/macho/pstartup.a
blob: d22083796fd23468aa65eb5b3acd3d5f7a0c27bb (plain) (tree)
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060



























































































































































                                                                                          
                          

















































































































































































































































































                                                                           
                               





































































































                                                             
                   

















































































                                          

                                 
                             
        






































































































































































                                          
                           











































































































































































































































































                                         
                  





































                               
                




                               
                      


                              
                         









































































                                              
                   


                          
                    




















































































                                          
                    


























































                               
                          







































                               
                  































                                
                          
































                               
                 
























































                                              
               























































                                              
                       










































                                  
                       
























































                                    
               













                               
               




































                                            
               

















                                 


                           
                              
                       
                        
                       
                        



                        
      
                        
                     


                        




























































































                                        
             















































































































































































































                                       
                   





























                                         
                   



























                                         
                   

























                                         
                   




















                                         
                    




























                                         
                    


























                                         
                    
























                                         
                    




















                                         
                  






























































































































































































































                                           
                           































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                                        
                
               

                           




























































                                        
 
     

                           












                                                



























































                                     
                 




                        
                 





                        
                 





                          
                 






                        
                 





                        
                 

























                                            
                       



































































                                            
                    










                                            
                    












                                            
                    












                                            
                    















                                             
                    

















                                             
                    



















                                             
                    





















                                             
                    
































                                             
                    






                          
                    






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     






                          
                     











                          
               
























































































                                            
                 























































                                            
                  

















































                                            
              
















































                                            
               



































































                                            
                               









































                                           
             
                                  
             
                                  
             
                                  
             
                                  
             
                                  
             
                                  
             
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              
                                  
              





                                  
                       






















                                           
                       





















                                           
                       



































                                           
                       










































                                           
                      

















































































































































































































































































































                                           
                        







                          
                        






















                                           
                        





















                                           
                        



















                                           
                        






























                                                                           
                         

























































































































                                           
                         








































                                   
                           
















                                
                           


















                                 
                           






















                         
                           

























                           
                           



























                            
                     


































                             
                    

















                            
                  





























































































































                                  
                   
































                               
                   
































                               
                   
































                               
                  
































                               
                  
































                               
                  
































                               
                 
































                               
                    
































                               
                  
































                               

                   
































                               

                  

































                               

                     





































































































































































































































































































                                               
# comment
# comment	File:	pstartup.a
# comment	Author:	John van Groningen
# comment	Machine:	power macintosh

LINUX	=	0
# comment PROFILE	=	0

#define	sp	r1

#define	d0	r24
#define	d1	r25
#define	d2	r26
#define	d3	r27
#define	d4	r28
#define	d5	r29
#define	d6	r30
#define	d7	r31

#define	a0	r23
#define	a1	r22
#define	a2	r21
#define	a3	r20
#define	a4	r19
#define	a5	r18
#define	a6	r17

#define	o0	r3
#define	o1	r4
#define	o2	r5
#define	o3	r6
#define	o4	r7
#define	o5	r8

#define	g2	r9
#define	g3	r10

#define	g0	r11
#define	g1	r12

#define	int_reg	r16
#define	char_reg	r15
#define	real_reg	r14
#define	bool_reg	r13

	.macro	setmbit
	rlwinm	$2,$1,32-$6-3,3+$6,31
	lbzx	$4,$0,$2
	rlwinm	$5,$1,(32-$6) & 31,29,31
	srw	$3,g3,$5
	or	$4,$4,$3
	stbx	$4,$0,$2
	.endmacro

# comment	&vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&scratch 5,&shift 6
# comment	rlwinm	&byte_offset,&bit_n,32-&shift-3,3+&shift,31
# comment	lbzx	&byte,&vector,&byte_offset
# comment	rlwinm	&scratch,&bit_n,(32-&shift) & 31,29,31
# comment	srw	&bit,g3,&scratch
# comment	or	&byte,&byte,&bit
# comment	stbx	&byte,&vector,&byte_offset

	.macro	tstmbit
	rlwinm	$2,$1,32-$6-3,3+$6,31
	lbzx	$4,$0,$2
	rlwinm	$5,$1,32-$6,29,31
	rlwnm.	$3,$4,$5,24,24	
	.endmacro

# comment	&vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&bit_n_in_byte 5,&shift 6
# comment	rlwinm	&byte_offset,&bit_n,32-&shift-3,3+&shift,31
# comment	lbzx	&byte,&vector,&byte_offset
# comment	rlwinm	&bit_n_in_byte,&bit_n,32-&shift,29,31
# comment	rlwnm.	&bit,&byte,&bit_n_in_byte,24,24	
# comment	.endmacro

	.macro	clrmbit
	rlwinm	$2,$1,32-$6-3,3+$6,31
	lbzx	$4,$0,$2
	rlwinm	$5,$1,32-$6,29,31
	srw	$3,g3,$5
	andc	$4,$4,$3
	stbx	$4,$0,$2
	.endmacro

# comment	&vector 0,&bit_n 1,&byte_offset 2,&bit 3,&byte 4,&scratch 5,&shift 6
# comment	rlwinm	&byte_offset,&bit_n,32-&shift-3,3+&shift,31
# comment	lbzx	&byte,&vector,&byte_offset
# comment	rlwinm	&scratch,&bit_n,32-&shift,29,31
# comment	srw	&bit,g3,&scratch
# comment	andc	&byte,&byte,&bit
# comment	stbx	&byte,&vector,&byte_offset
# comment	.endmacro

#include	"pmacros.a"

MACOSX		=	1

NODE_POINTER_OFFSET	=	0

SHARE_CHAR_INT	=	1
COPIED_VECTOR	=	1
RECORDS		=	1
MY_ITOS		=	1
FINALIZERS	=	1

USE_DCBZ		=	0
COMPACT_GC_ONLY	=	0

ADJUST_HEAP_SIZE	=	1
MARK_GC		=	1
MARK_AND_COPY_GC	=	1

 .if LINUX
STDERR_TO_FILE	=	0
WRITE_HEAP		=	0
 .else
WRITE_HEAP		=	0
STDERR_TO_FILE	=	1
 .endif
# comment	PROFILE	=	0
UNBOXED_CLOSURES	=	1

MODULE_NAMES_IN_TIME_PROFILER	=	1

EXCEPTIONS		=	0

MINIMUM_HEAP_SIZE	=	8000

 .if 1
DESCRIPTOR_ARITY_OFFSET	=	(-2)
ZERO_ARITY_DESCRIPTOR_OFFSET	=	(-8)
 .else
DESCRIPTOR_ARITY_OFFSET	=	(-8)
ZERO_ARITY_DESCRIPTOR_OFFSET	=	(-12)
 .endif

	.globl	r_to_i_buffer
	.comm	r_to_i_buffer,8
	.comm	heap_mbp,4
	.comm	heap_p,4
	.comm	heap_p1,4
	.comm	heap_p2,4
	.comm	heap_size_33,4
 .if COPIED_VECTOR
	.comm	heap_size_129,4
	.comm	heap_copied_vector,4
	.comm	heap_copied_vector_size,4
	.comm	heap_end_after_copy_gc,4
 .endif
	.comm	extra_heap,4
	.comm	extra_heap_size,4
	.comm	stack_p,4
 .if MACOSX
	.comm	end_a_stack,4
	.comm	end_b_stack,4
 .endif
	.comm	_halt_sp,4
	.globl	_halt_sp
# comment number of long words requested from the garbage collector
	.comm	alloc_size,4
	.comm	basic_only,4
	.comm	last_time,4
	.comm	execute_time,4
	.comm	garbage_collect_time,4
	.comm	IO_time,4

	.globl	saved_heap_p
	.comm	saved_heap_p,8
	
	.globl	saved_a_stack_p
	.comm	saved_a_stack_p,4
	
	.comm	sprintf_buffer,32
	.comm	sprintf_time_buffer,20

	.globl	small_integers
	.comm	small_integers,33*8
	.globl	static_characters
	.comm	static_characters,256*8

 .if EXCEPTIONS
	.comm	exception_info,12
 .endif

	.comm	caf_list,4
	.globl	caf_listp
	.comm	caf_listp,4

	.data

heap_p3:	.long	0
heap_vector:.long	0
heap_end_after_gc:	.long	0

 .if MARK_GC
bit_counter:
	.long	0
bit_vector_p:
	.long	0
zero_bits_before_mark:
	.long	1
free_after_mark:
	.long	1000
last_heap_free:
	.long	0
lazy_array_list:
	.long	0
  .if ADJUST_HEAP_SIZE
bit_vector_size:
	.long	0	; in bits
  .endif
 .endif

	.align	2
zero_length_string:
	.long	__STRING__+2
	.long	0
true_string:
	.long	__STRING__+2
	.long	4
true_c_string:
	.ascii	"True"
	.byte	0,0,0,0
false_string:
	.long	__STRING__+2
	.long	5
false_c_string:
	.ascii	"False"
	.byte	0,0,0
file_c_string:
	.ascii	"File"
	.byte	0,0,0,0

# comment -1: compact or mark, no extra heap
# comment  0: copy, no extra heap
# comment  1: compact, extra heap
# comment  2: copy, extra heap
garbage_collect_flag:
	.byte	0
	.byte	0,0,0

out_of_memory_string_1:
	.ascii	"Not enough memory to allocate heap and stack"
	.byte	13,0
printf_int_string:
	.ascii	"%d"
	.byte	0
printf_real_string:
	.ascii	"%g"
	.byte	0
printf_string_string:
	.ascii	"%s"
	.byte	0
printf_char_string:
	.ascii	"%c"
	.byte	0
garbage_collect_string_1:
	.ascii	"A stack: "
	.byte	0
garbage_collect_string_2:
	.ascii	" bytes. BC stack: "
	.byte	0
garbage_collect_string_3:
	.ascii	" bytes."
	.byte	13,0
heap_use_after_gc_string_1:
	.ascii	"Heap use after garbage collection: "
	.byte	0
heap_use_after_gc_string_2:
	.ascii	" Bytes."
	.byte	13,0
stack_overflow_string:
	.ascii	"Stack overflow."
	.byte	13,0
out_of_memory_string_4:
	.ascii	"Heap full."
	.byte	13,0
time_string_1:
	.ascii	"Execution: "
	.byte	0
time_string_2:
	.ascii	"  Garbage collection: "
	.byte	0
time_string_3:
	.ascii	"  IO: "
	.byte	0
time_string_4:
	.ascii	"  Total: "
	.byte	0
high_index_string:
	.ascii	"Index too high in UPDATE string."
	.byte	13,0
low_index_string:
	.ascii	"Index negative in UPDATE string."
	.byte	13,0
IO_error_string:
	.ascii	"IO error: "
	.byte	0
new_line_string:
	.byte	13,0
		
sprintf_time_string:
	.ascii	"%d.%02d"
	.byte	0

 .if MARK_GC
marked_gc_string_1:
	.ascii	"Marked: "
	.byte	0
 .endif
 .if PROFILE
 	.align	2
  .if MODULE_NAMES_IN_TIME_PROFILER
m_system:
	.long	6
	.ascii	"System"
	.byte	0,0
	.long	m_system
  .endif
garbage_collector_name:
	.long	0
	.ascii	"garbage_collector"
	.byte	0
	.align	2
 .endif
 .if WRITE_HEAP
	.comm	heap2_begin_and_end,8
 .endif

	.align	3
entier_constants_and_buffers:
	.double	0.0
	.double	0.0
	.long	0x43300000
	.long	0x00000000
	.long	0x43300000
	.long	0x80000000

 .if FINALIZERS
	.globl	__Nil
	.globl	e____system__kFinalizer
	.globl	e____system__kFinalizerGCTemp
	.globl	finalizer_list
	.comm	finalizer_list,4
	.globl	free_finalizer_list
	.comm	free_finalizer_list,4
 .endif

	.align	1

	.text
	.globl	_abc_main
	.globl	print_
	.globl	print_char
	.globl	print_int
	.globl	print_real
	.globl	print_sc
	.globl	print_symbol
	.globl	print_symbol_sc
	.globl	print__string__
	.globl	print__chars__sc
	.globl	printD

	.globl	eprint__
	.globl	eprint__string__
	.globl	eprintD

	.globl	push_t_r_args
	.globl	push_a_r_args
	.globl	halt
		
	.globl	catAC
	.globl	sliceAC
	.globl	updateAC
	.globl	eqAC
	.globl	cmpAC

	.globl	string_to_string_node

	.globl	create_array
	.globl	create_arrayB
	.globl	create_arrayC
	.globl	create_arrayI
	.globl	create_arrayR
	.globl	create_R_array

	.globl	_create_arrayB
	.globl	_create_arrayC
	.globl	_create_arrayI
	.globl	_create_arrayR
	.globl	_create_r_array

	.globl	BtoAC
	.globl	DtoAC
	.globl	ItoAC
	.globl	RtoAC
	.globl	eqD

	.globl	collect_0,collect_1,collect_2,collect_3
	.globl	collect_00,collect_01,collect_02,collect_03

	.globl	eval_01,eval_11,eval_02,eval_12,eval_22

	.globl	e__system__sAP
	.globl	yet_args_needed,yet_args_needed_0,yet_args_needed_1
	.globl	yet_args_needed_2,yet_args_needed_3,yet_args_needed_4

	.globl	_c3,_c4,_c5,_c6,_c7,_c8,_c9,_c10,_c11,_c12
	.globl	_c13,_c14,_c15,_c16,_c17,_c18,_c19,_c20,_c21,_c22
	.globl	_c23,_c24,_c25,_c26,_c27,_c28,_c29,_c30,_c31,_c32

	.globl	__indirection,__eaind,eval_fill
	.globl	eval_upd_0,eval_upd_1,eval_upd_2,eval_upd_3,eval_upd_4
	.globl	eval_upd_5,eval_upd_6,eval_upd_7,eval_upd_8,eval_upd_9
	.globl	eval_upd_10,eval_upd_11,eval_upd_12,eval_upd_13,eval_upd_14
	.globl	eval_upd_15,eval_upd_16,eval_upd_17,eval_upd_18,eval_upd_19
	.globl	eval_upd_20,eval_upd_21,eval_upd_22,eval_upd_23,eval_upd_24
	.globl	eval_upd_25,eval_upd_26,eval_upd_27,eval_upd_28,eval_upd_29
	.globl	eval_upd_30,eval_upd_31,eval_upd_32
		
	.globl	repl_args_b
	.globl	push_arg_b
	.globl	del_args
 .if 0
	.globl	o__S_P2
	.globl	ea__S_P2
 .endif
	.globl	_add_IO_time
	.globl	_add_execute_time
		
	.globl	_IO_error
	.globl	print_error
	.globl	stack_overflow
	.globl	_stack_overflow

	.globl	out_of_memory_4

	.globl	acos_real
	.globl	asin_real
	.globl	atan_real
	.globl	cos_real
	.globl	sin_real
	.globl	tan_real
	.globl	ln_real
	.globl	log10_real
	.globl	exp_real
	.globl	sqrt_real
	.globl	pow_real
	.globl	entier_real
 .if EXCEPTIONS
	.globl	e__Exceptions__scatch__exception
	.globl	e__Exceptions__sraise__exception
 .endif
 .if LINUX
	.globl	__start
 .else
 	.globl	_start
 .endif
	.globl	__driver

		
# comment from system.abc:	
	.globl	INT
	.globl	CHAR
	.globl	BOOL
	.globl	REAL
	.globl	FILE
	.globl	__STRING__
	.globl	__ARRAY__
	.globl	__cycle__in__spine
	.globl	__print__graph
	.globl	__eval__to__nf

 .if STDERR_TO_FILE
	.globl	_close_stderr_file
 .endif

# comment from cgcon.c:
	.globl	_w_print_char
	.globl	_w_print_text
	.globl	_w_print_int
	.globl	_w_print_real
	.globl	_w_print_string

 .if STDERR_TO_FILE
	.globl	_er_print_char
	.globl	_er_print_string
	.globl	_er_print_int
	.globl	_er_print_text
 .else
	.globl	_ew_print_char
	.globl	_ew_print_string
	.globl	_ew_print_int
 .endif
 .if 0

	.globl	_wait_for_key_press
 .else
 	.globl	_execution_aborted
 .endif
	.globl	_stack_size
	.globl	_heap_size
	.globl	_flags
 .if ADJUST_HEAP_SIZE
	.globl	_heap_size_multiple
	.globl	_initial_heap_size
 .endif
 
# comment from standard c library:
	.globl	_sprintf
 .if LINUX
	.globl	malloc
	.globl	free
 .else
	.globl	_NewPtr
	.globl	_DisposePtr
	.globl	_TickCount
	.globl	_Debugger
 .endif
	.globl	_acos
	.globl	_asin
	.globl	_atan
	.globl	_cos
	.globl	_sin
	.globl	_tan
	.globl	_log
	.globl	_log10
	.globl	_exp
	.globl	_sqrt
	.globl	_pow

 .if PROFILE
	.globl	init_profiler
	.globl	profile_s,profile_n,profile_r,profile_ti
	.globl	write_profile_information,write_profile_stack
 .endif

# __TEXT._abc_main:

_abc_main:
 	mflr	r0
	stwu	r0,-4(sp)
	stmw	r13,-76(sp)
	subi	sp,sp,76

	lea	o0,_flags
	lwz	d0,0(o0)
	lea	o0,basic_only
	andi.	d0,d0,1
	stw	d0,0(o0)

	lea	o0,_heap_size
	lwz	d0,0(o0)
	subi	o0,d0,3
	li	o1,33
	divwu	o0,o0,o1
	lea	o1,heap_size_33
	stw	o0,0(o1)

 .if COPIED_VECTOR
	lea	o0,_heap_size
	li	o1,129
	lwz	d0,0(o0)
	subi	o0,d0,7
	divwu	o0,o0,o1
	lea	o1,heap_size_129
	stw	o0,0(o1)
	addi	o0,o0,3
	lea	o1,heap_copied_vector_size
	clrrwi	o0,o0,2
	stw	o0,0(o1)
	
	lea	o1,heap_end_after_copy_gc
	li	g0,0
	stw	g0,0(o1)
 .endif

	lea	o1,_heap_size
	lwz	o0,0(o1)
	addi	o0,o0,7
	clrrwi	o0,o0,3
	stw	o0,0(o1)
	addi	o0,o0,3+4

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif

 .if LINUX
	bl	malloc
 .else
	bl	L_NewPtr$stub
 .endif
	nop
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
	cmpwi	0,o0,0
	beq	no_memory_1

	lea	o1,heap_mbp
	stw	o0,0(o1)

	addi	o0,o0,3
	clrrwi	a6,o0,2

	lea	o0,heap_p
	lea	o1,heap_p1
	stw	a6,0(o0)
	stw	a6,0(o1)

 .if MACOSX
	lea	o0,_stack_size
	lwz	o0,0(o0)
	
	stwu	sp,-64(sp)
  .if 1
	bl	_allocate_a_stack
  .else
	bl	L_NewPtr$stub
  .endif
	addi	sp,sp,64

	cmpwi	0,o0,0
	beq	no_memory_1

	mr	a4,o0
	lea	o0,stack_p
	stw	a4,0(o0)

	lea	o0,_stack_size
	addi	d0,sp,128
	lwz	d1,0(o0)

	lea	o0,end_a_stack
 	sub	d0,d0,d1
	add	d1,a4,d1
	stw	d1,0(o0)

	lea	o0,end_b_stack
	stw	d0,0(o0)
 .else
	lea	o0,_stack_size
	addi	d0,sp,-128
	lwz	o0,0(o0)
 	sub	a4,d0,o0

	lea	o0,stack_p
	stw	a4,0(o0)
 .endif

	lea	a0,small_integers
	li	d0,0
	lea	d1,INT+2
make_small_integers_lp:
	stw	d1,0(a0)
	stw	d0,4(a0)
	addi	d0,d0,1
	cmpwi	0,d0,33
	addi	a0,a0,8
	bne	make_small_integers_lp

	lea	a0,static_characters
	li	d0,0
	lea	d1,CHAR+2
make_static_characters_lp:
	stw	d1,0(a0)
	stw	d0,4(a0)
	addi	d0,d0,1
	cmpwi	0,d0,256
	addi	a0,a0,8
	bne	make_static_characters_lp

	lea	o0,caf_listp
 	lea	a0,caf_list+4
	stw	a0,0(o0)
	li	g0,0
	stw	g0,-4(a0)

 .if FINALIZERS
 	lea	o0,finalizer_list
 	lea	o1,free_finalizer_list
 	lea	a0,__Nil-8
 	stw	a0,0(o0)
 	stw	a0,0(o1)
 .endif

 .if COPIED_VECTOR
	lea	o0,heap_size_129
	lwz	d1,0(o0)
	slwi	d7,d1,6-2
	slwi	d1,d1,6
	lea	o0,heap_copied_vector
	add	d0,a6,d1
	lea	o1,heap_copied_vector_size
	stw	d0,0(o0)
	lwz	o1,0(o1)
	lea	o0,heap_p2
	add	d0,d0,o1
	stw	d0,0(o0)
 .else
	lea	o0,_heap_size
	lwz	d1,0(o0)
	lea	o0,heap_p2
	srwi	d1,d1,1
	add	d0,a6,d1
	srwi	d7,d1,2
	stw	d0,0(o0)
 .endif

	lea	o0,garbage_collect_flag
	li	g0,0
	stb	g0,0(o0)

 .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark1
 .endif

 .if MARK_GC | COMPACT_GC_ONLY
	lea	o0,heap_size_33
	lea	o1,heap_vector
	lwz	d0,0(o0)
	stw	a6,0(o1)
	slwi	d7,d0,3
	add	a6,a6,d0
	addi	a6,a6,3
	lea	o0,heap_p3
	clrrwi	a6,a6,2
	stw	a6,0(o0)
	lea	o0,garbage_collect_flag
	li	d0,-1
	stb	d0,0(o0)
 .endif

 .if MARK_AND_COPY_GC
no_mark1:
 .endif

 .if ADJUST_HEAP_SIZE
 	lea	d0,_initial_heap_size
 	lea	o0,_flags
	lwz	d0,0(d0)
  .if MARK_AND_COPY_GC
	lwz	o0,0(o0)
	li	d1,MINIMUM_HEAP_SIZE/2
	andi.	r0,o0,64
	bne	no_mark9
	add	d1,d1,d1
no_mark9:
  .else
   .if MARK_GC | COMPACT_GC_ONLY
 	li	d1,MINIMUM_HEAP_SIZE
   .else
 	li	d1,MINIMUM_HEAP_SIZE/2
   .endif
  .endif
	cmpw	d0,d1
	ble	too_large_or_too_small
	srwi	d0,d0,2
 	cmpw	d0,d7
	bge	too_large_or_too_small
	mr	d7,d0
too_large_or_too_small:
 .endif

 .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark2
 .endif

 .if MARK_GC & ADJUST_HEAP_SIZE
	lea	o0,bit_vector_size
	stw	d7,0(o0)
 .endif

 .if MARK_AND_COPY_GC
no_mark2:
 .endif

 	lea	o0,heap_end_after_gc
	slwi	d0,d7,2
	add	d0,a6,d0
	stw	d0,0(o0)

	lea	o0,_halt_sp
	stw	sp,0(o0)

 .if EXCEPTIONS
	lea	o0,exception_info
	li	o1,0
	stw	o1,0(o0)
 .endif
	bl	_init_timer


	lea	a5,__cycle__in__spine
	lea	int_reg,INT+2
	lea	char_reg,CHAR+2
	lea	real_reg,REAL+2
	lea	bool_reg,BOOL+2

 .if USE_DCBZ
 	subi	d7,d7,15
	li	g2,32
 .endif

	li	r0,-1
 .if PROFILE
	stwu	r0,-4(sp)
	bl	init_profiler
 .endif
	stwu	r0,-4(sp)

 .if 0
	stwu	sp,-64(sp)
	bl	.Debugger
	nop
	addi	sp,sp,64
 .endif

	subi	a6,a6,4

 .if LINUX
 	bl	__start
 .else
	bl	_start
 .endif
	nop

exit:
	bl	_add_execute_time

	lea	o0,_flags
	lwz	d0,0(o0)
	andi.	g0,d0,8
	beq	no_print_execution_time

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
		
	lea	o0,time_string_1
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop

	lea	a0,execute_time
	lwz	d0,0(a0)
	bl	_print_time

	lea	o0,time_string_2
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

	lea	a0,garbage_collect_time
	lwz	d0,0(a0)
	bl	_print_time

	lea	o0,time_string_3
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

	lea	a0,IO_time
	lwz	d0,0(a0)
	bl	_print_time

	lea	o0,time_string_4
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

	lea	a0,execute_time
	lwz	d0,0(a0)
	lea	a0,garbage_collect_time
	lwz	d2,0(a0)
	add	d0,d0,d2
	lea	a0,IO_time
	lwz	d2,0(a0)
	add	d0,d0,d2

	bl	_print_time

	li	o0,13
 .if STDERR_TO_FILE
	bl	_er_print_char
 .else
	bl	_ew_print_char
 .endif
	nop

 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
no_print_execution_time:

exit_3:
exit_2:
	lea	o0,heap_mbp
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)	
 .endif
	lwz	o0,0(o0)
 .if LINUX
	bl	free
 .else
	bl	L_DisposePtr$stub
 .endif
	nop
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif

exit_1:
 .if STDERR_TO_FILE
	lea	o0,_flags
	lwz	d0,0(o0)
	andi.	g0,d0,128
	beq	no_close_stderr_file

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_close_stderr_file
	nop	
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif

no_close_stderr_file:
 .endif
 .if PROFILE
	mflr	r0
	stwu	r0,-4(sp)
	bl	write_profile_information
 .endif

	lwz	r0,76(sp)
	mtlr	r0
	lmw	r13,0(sp)
	addi	sp,sp,80
	blr

__driver:
	lea	o1,_flags
	lwz	o0,0(o1)
	andi.	r0,o0,16
	bne	_eval__to__nf
	b	__print__graph
_eval__to__nf:
	b	__eval__to__nf

_print_time:
	mflr	r0
	stwu	r0,-4(sp)

 .if LINUX
	li	o1,100
 .else
	li	o1,60
 .endif
	divwu	o2,d0,o1

 .if LINUX
	mulli	o3,o2,100
 	sub	o3,d0,o3
 .else
	mulli	o3,o2,60
	sub	o3,d0,o3
	mulli	o3,o3,5
	li	o1,3
	divwu	o3,o3,o1
 .endif		
	lea	o1,sprintf_time_string
	lea	o0,sprintf_time_buffer

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_sprintf$stub

	lea	o0,sprintf_time_buffer
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop	
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	blr	

no_memory_1:
	lea	o0,out_of_memory_string_1

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
	b	exit_1

# __TEXT.print_sc:

print_sc:
	lea	o0,basic_only
	lwz	o1,0(o0)
	cmpwi	0,o1,0
	bne	end_print
print_:
	mr	o0,d0

print_string_o0_and_return:
	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_string
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

end_print:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

# __TEXT.printD:

printD:	andi.	r0,d0,2
	bne	printD_

	mr	a2,d0
	b	print_string_a2

# __TEXT.print_symbol:

print_symbol:
	li	d1,0
	b	print_symbol_2

# __TEXT.print_symbol_sc:

print_symbol_sc:
	lea	o0,basic_only
	lwz	d1,0(o0)
print_symbol_2:
	lwz	d0,0(a0)
		
	cmpw	0,int_reg,d0
	beq	print_int_node

	cmpw	0,char_reg,d0
	beq	print_char_node

	cmpw	0,bool_reg,d0
	beq	print_bool

	cmpw	0,real_reg,d0
	beq	print_real_node

	cmpwi	0,d1,0
	bne	end_print_symbol

printD_:	lha	d1,-2(d0)
	addi	a2,d0,-2

	cmplwi	0,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

end_print_symbol:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

print_int_node:
	lwz	o0,4(a0)
print_int2:
	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_int
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

# __TEXT.print_int:

print_int:
	mr	o0,d0
	b	print_int2

# __TEXT.print_char:

print_char:
	lea	o0,basic_only
	lwz	d1,0(o0)
	cmpwi	0,d1,0
	bne	print_char_node_bo

	b	print_char_node_sc
		
print_char_node:
	cmpwi	0,d1,0
	lwz	d0,4(a0)
	bne	print_char_node_sc
print_char_node_bo:
	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	li	o0,0x27
	bl	_w_print_char
		
	mr	o0,d0
	bl	_w_print_char

	li	o0,0x27
	bl	_w_print_char
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

print_char_node_sc:
	mr	o0,d0

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_char
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	
		
print_bool:
	lbz	o0,7(a0)
	cmpwi	0,o0,0
	beq	print_false

print_true:
	lea	o0,true_c_string
	b	print_string_o0_and_return

print_false:
	lea	o0,false_c_string
	b	print_string_o0_and_return

# __TEXT.print_real:

print_real:
	fmr	f1,f14
	b	print_real_
print_real_node:
	lfd	f1,4(a0)
print_real_:
	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_real
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

print_string_a2:
	lwz	o1,0(a2)
	addi	o0,a2,4

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_text
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

# __TEXT.print__chars__sc:

print__chars__sc:
	lea	o0,basic_only
	lwz	d1,0(o0)
	cmpwi	0,d1,0
	bne	no_print_chars

print__string__:
	lwz	o1,4(a0)
	addi	o0,a0,8

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	_w_print_text
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

no_print_chars:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr

	.text
# __TEXT.eprint__:

eprint__:
	mr	o0,d0

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr

	.text
# __TEXT.eprint__string__:

eprint__string__:
	lwz	o1,4(a0)
	addi	o0,a0,8

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if STDERR_TO_FILE
	bl	_er_print_text
 .else
	bl	_ew_print_text
 .endif
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

	.text
# __TEXT.eprintD:

eprintD:	andi.	r0,d0,2
	bne	eprintD_

	mr	a2,d0
	b	eprint_string_a2

eprintD_:	lha	d1,-2(d0)
	addi	a2,d0,-2

	cmplwi	0,d1,256
	bge	eprint_record

	slwi	d1,d1,3
	sub	a2,a2,d1

 	lhz	d1,DESCRIPTOR_ARITY_OFFSET(a2)
	addi	a2,a2,4
	slwi	d1,d1,3
	add	a2,a2,d1
	b	eprint_string_a2

eprint_record:
	lwz	a2,-4(a2)

eprint_string_a2:
	lwz	o1,0(a2)
	addi	o0,a2,4

	mflr	r0
	stwu	r0,-4(sp)
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if STDERR_TO_FILE
	bl	_er_print_text
 .else
	bl	_ew_print_text
 .endif
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,8
 .else
	lwz	r0,64(sp)
	addi	sp,sp,72
 .endif
	mtlr	r0
	lwz	r0,-4(sp)
	blr	

	.text
# __TEXT.DtoAC:

DtoAC:	lha	d1,-2(d0)
	addi	a0,d0,-2

	cmplwi	0,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

	addi	d3,d2,3
	bsubi	d7,2

	srwi	d3,d3,2		
	sub.	d7,d7,d3
	blt	DtoAC_gc
DtoAC_r_gc:
	lea	o1,__STRING__+2

	subic.	d3,d3,1

	addi	a0,a6,4
	stw	o1,4(a6)
	stwu	d2,8(a6)
	blt	DtoAC_copy

DtoAC_copy_lp:
	lwzu	o0,4(a2)
	subic.	d3,d3,1
	stwu	o0,4(a6)
	bge	DtoAC_copy_lp
DtoAC_copy:

	lwz	r0,0(sp)
	baddi	sp,4
	blr	

DtoAC_gc:	mflr	r0
	mr	d0,a0
	bl	collect_0
	mr	a2,d0
	b	DtoAC_r_gc

DtoAC_record:
	lwz	a0,-4(a0)
	b	DtoAC_a0

	.text
# __TEXT.push_a_r_args:

push_a_r_args:
	lwz	a1,8(a0)
	subi	a1,a1,2
	lhz	d3,0(a1)
	subi	d3,d3,256
	lhz	d1,2(a1)
	addi	a1,a1,4
	sub	d2,d3,d1
	slwi	d0,d0,2

	mullw	d4,d0,d3
	addi	a0,a0,12
	add	a0,a0,d4

	lwz	r0,0(sp)
	addi	sp,sp,4

	slwi	o0,d1,2
	add	a0,a0,o0
	mr	a3,a0
	b	push_a_elements

push_a_elements_lp:
	lwzu	o0,-4(a3)
	addi	a4,a4,4
	stw	o0,-4(a4)
push_a_elements:
	subic.	d1,d1,1
	bge	push_a_elements_lp

	slwi	o0,d2,2
	add	a0,a0,o0
	b	push_b_elements

push_b_elements_lp:
	lwzu	o0,-4(a0)
	stwu	o0,-4(sp)
push_b_elements:
	subic.	d2,d2,1
	bge	push_b_elements_lp

	mr	d0,a1
	blr	

# __TEXT.push_t_r_args:

push_t_r_args:
	lwz	a1,0(a0)
	addi	a0,a0,4
	subi	a1,a1,2
	lhz	d3,0(a1)
	lhz	d1,2(a1)
	subi	d3,d3,256
	addi	d0,a1,4
	sub	d2,d3,d1

	slwi	d4,d3,2
	cmplwi	0,d3,2
	add	a1,a0,d4
	ble	small_record
		
	lwz	a1,4(a0)
	subi	a1,a1,4
	add	a1,a1,d4
small_record:
	lwz	r0,0(sp)
	addi	sp,sp,4
	b	push_r_b_elements

push_r_b_elements_lp:
	subic.	d3,d3,1
	bne	not_first_arg_b
		
	lwz	o0,0(a0)
	stwu	o0,-4(sp)
	b	push_r_b_elements
not_first_arg_b:
	lwzu	o0,-4(a1)
	stwu	o0,-4(sp)
push_r_b_elements:
	subic.	d2,d2,1
	bge	push_r_b_elements_lp

	b	push_r_a_elements

push_r_a_elements_lp:
	subic.	d3,d3,1
	addi	a4,a4,4
	bne	not_first_arg_a

	lwz	o0,0(a0)
	stw	o0,-4(a4)
	b	push_r_a_elements

not_first_arg_a:
	lwzu	o0,-4(a1)
	stw	o0,-4(a4)
push_r_a_elements:
	subic.	d1,d1,1
	bge	push_r_a_elements_lp

	blr	

	.text
# __TEXT.BtoAC:

BtoAC:
	andi.	d0,d0,255
	beq	BtoAC_false
BtoAC_true:
	lea	a0,true_string
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr
BtoAC_false:
	lea	a0,false_string
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.RtoAC:

RtoAC:
 .if LINUX
 	fmr	f1,f14
 .else
	stfd	f14,-8(sp)
 .endif
	lea	o1,printf_real_string
	lea	o0,sprintf_buffer
 .if LINUX
	creqv	6,6,6
 .else
	lwz	o2,-8(sp)
	lwz	o3,-4(sp)
 .endif
	mflr	r0
 .if MACOSX
	stwu	r0,-4(sp)
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stw	r0,-4(sp)
	stwu	sp,-64(sp)
 .endif
	bl	L_sprintf$stub
 .if MACOSX
 	lwz	sp,0(sp)
	lwz	r0,0(sp)
	addi	sp,sp,4
 .else
	lwz	r0,60(sp)
	addi	sp,sp,64
 .endif
	mtlr	r0

	b	return_sprintf_buffer_string
		
	.text
# __TEXT.ItoAC:

ItoAC:
 .if MY_ITOS
	lea	a0,sprintf_buffer
	cmpwi	0,d0,0
	bge	no_minus

	li	o0,45
	stb	o0,0(a0)
	addi	a0,a0,1
	li	g0,0
	sub	d0,g0,d0
no_minus:
	addi	a2,a0,12
	beq	zero_digit

calculate_digits:
	cmplwi	0,d0,10
	blt	last_digit

#if 1
	lis	o0,-13107
	subi	o0,o0,13107
	mulhwu	o0,o0,d0

	rlwinm	o1,o0,0,0,31-3
	srwi	o0,o0,3

	sub	a1,d0,o1
	slwi	o1,o0,1

	sub	a1,a1,o1
#else
	li	o1,10
	divwu	o0,d0,o1

	mullw	a1,o0,o1
	sub	a1,d0,a1
#endif
	addi	a1,a1,48
	mr	d0,o0

	stb	a1,0(a2)
	addi	a2,a2,1
		
	b	calculate_digits

last_digit:
	cmpwi	0,d0,0
	beq	no_zero
zero_digit:
	addi	d0,d0,48
	stb	d0,0(a2)
	addi	a2,a2,1
no_zero:
	addi	a1,a0,12

reverse_digits:
	lbzu	d1,-1(a2)
	cmpw	0,a2,a1
	stb	d1,0(a0)
	addi	a0,a0,1
	bne	reverse_digits

	li	g0,0
	lea	d0,sprintf_buffer

	stb	g0,0(a0)
	sub	d0,a0,d0
	b	sprintf_buffer_to_string

 .else	
	mr	o2,d0
	lea	o1,printf_int_string
	lea	o0,sprintf_buffer
	
  .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
  .else
	stwu	sp,-64(sp)
  .endif
	bl	L_sprintf$stub
  .if MACOSX
 	lwz	sp,0(sp)
  .else
	addi	sp,sp,64
  .endif
 .endif

return_sprintf_buffer_string:
	lea	o0,sprintf_buffer
	li	d0,-1
	subi	o0,o0,1
	
count_chars_in_c_string:
	lbzu	d1,1(o0)
	addi	d0,d0,1
	cmpwi	d1,0
	bne	count_chars_in_c_string

 .if MY_ITOS
sprintf_buffer_to_string:
 .endif
	addi	d1,d0,3
	srwi	d1,d1,2
	subi	d7,d7,2
	sub.	d7,d7,d1
	bge+	D_to_S_no_gc

	mflr	r0
	bl	collect_0

D_to_S_no_gc:
	lea	a0,sprintf_buffer
	lea	o0,__STRING__+2
	addi	d2,a6,4
	stw	o0,4(a6)
	stwu	d0,8(a6)
	b	D_to_S_cp_str_2

D_to_S_cp_str_1:
	lwz	o0,0(a0)
	addi	a0,a0,4
	stwu	o0,4(a6)
D_to_S_cp_str_2:
	subic.	d1,d1,1
	bge	D_to_S_cp_str_1

	mr	a0,d2		
	lwz	r0,0(sp)
	addi	sp,sp,4
 .if USE_DCBZ
	li	g2,32
 .endif
	blr	

	.text
# __TEXT.eqD:

eqD:	lwz	d0,0(a0)
	lwz	o0,0(a1)
	cmpw	0,d0,o0
	bne	eqD_false

	cmpw	0,d0,int_reg
	beq	eqD_INT

	cmpw	0,d0,char_reg
	beq	eqD_CHAR

	cmpw	0,d0,bool_reg
	beq	eqD_BOOL

	cmpw	0,d0,real_reg
	beq	eqD_REAL

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

eqD_CHAR:
eqD_INT:	lwz	d1,4(a0)
	lwz	o0,4(a1)
	li	d0,0
	cmpw	0,d1,o0

	mfcr	d0
	srwi	d0,d0,31-2
	andi.	d0,d0,1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

eqD_BOOL:	lbz	d1,7(a0)
	lbz	o0,7(a1)
	li	d0,0
	cmpw	0,d1,o0

	mfcr	d0
	srwi	d0,d0,31-2
	andi.	d0,d0,1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

eqD_REAL:	lfd	f0,4(a0)
	lfd	f1,4(a1)

	fcmpo	0,f0,f1

	mfcr	d0
	srwi	d0,d0,31-2
	andi.	d0,d0,1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

eqD_false:
	li	d0,0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

# comment
# comment	the timer
# comment

_init_timer:
	mflr	r0
	stwu	r0,-4(sp)
  .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
  .else
	stwu	sp,-64(sp)
  .endif
  .if LINUX
	addi	o0,sp,8
	bl	times
	lwz	o0,8(sp)
  .else
	bl	L_TickCount$stub
  .endif
  .if MACOSX
 	lwz	sp,0(sp)
  .else
	addi	sp,sp,64
  .endif
	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	lea	o1,last_time
	stw	o0,0(o1)
		
	lea	o1,execute_time
	li	o0,0
	stw	o0,0(o1)

	lea	o1,garbage_collect_time
	stw	o0,0(o1)

	lea	o1,IO_time
	stw	o0,0(o1)

	blr	

_get_time_diff:
	mflr	r0
	stwu	r0,-4(sp)

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if LINUX
	addi	o0,sp,8
	bl	times
	lwz	o0,8(sp)
 .else
	bl	L_TickCount$stub
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
	lea	o2,last_time

	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	lwz	o1,0(o2)
	stw	o0,0(o2)
	sub	o0,o0,o1

	blr	
		
_add_execute_time:
	mflr	r0
	stwu	r0,-4(sp)

	bl	_get_time_diff

	lea	o2,execute_time

	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	lwz	o1,0(o2)
	add	o1,o1,o0
	stw	o1,0(o2)

	blr	

.add_garbage_collect_time:
	mflr	r0
	stwu	r0,-4(sp)

	bl	_get_time_diff

	lea	o2,garbage_collect_time

	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	lwz	o1,0(o2)
	add	o1,o1,o0
	stw	o1,0(o2)

	blr	

_add_IO_time:
	mflr	r0
	stwu	r0,-4(sp)

	bl	_get_time_diff

	lea	o2,IO_time

	lwz	r0,0(sp)
	addi	sp,sp,4
	mtlr	r0

	lwz	o1,0(o2)
	add	o1,o1,o0
	stw	o1,0(o2)

	blr	

# comment
# comment	the garbage collector
# comment

	.text
# __TEXT.collect_3:

collect_3:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	stw	a1,4(a4)
	stw	a2,8(a4)
	addi	a4,a4,12

	mflr	r0
	bl	collect_

	lwz	a2,-4(a4)
	lwz	a1,-8(a4)
	lwzu	a0,-12(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	mtlr	r0
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_2:

collect_2:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	stw	a1,4(a4)
	addi	a4,a4,8

	mflr	r0
	bl	collect_

	lwz	a1,-4(a4)
	lwzu	a0,-8(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	mtlr	r0
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_1:

collect_1:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	addi	a4,a4,4

	mflr	r0
	bl	collect_

	lwzu	a0,-4(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	mtlr	r0
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_0:

collect_0:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	mflr	r0
	bl	collect_

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	mtlr	r0
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_03:

collect_03:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	stw	a1,4(a4)
	stw	a2,8(a4)
	addi	a4,a4,12

	mflr	r0
	bl	collect_

	lwz	a2,-4(a4)
	lwz	a1,-8(a4)
	lwzu	a0,-12(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_02:

collect_02:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	stw	a1,4(a4)
	addi	a4,a4,8

	mflr	r0
	bl	collect_

	lwz	a1,-4(a4)
	lwzu	a0,-8(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_01:

collect_01:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	stw	a0,0(a4)
	addi	a4,a4,4

	mflr	r0
	bl	collect_

	lwzu	a0,-4(a4)

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif

	.text
# __TEXT.collect_00:

collect_00:
	stwu	r0,-4(sp)
 .if PROFILE
	lea	r3,garbage_collector_name
	mflr	r0
	bl	profile_s
 .endif
	mflr	r0
	bl	collect_

	lwz	r0,0(sp)
	mtctr	r0
	lwz	r0,4(sp)
	addi	sp,sp,8
 .if PROFILE
	b	profile_ti
 .else
	bctr
 .endif


 	.text
# __TEXT.collect_:

collect_:
	stwu	r0,-4(sp)

	addi	a6,a6,4
 .if USE_DCBZ
 	addi	d7,d7,15
 .endif

 .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark3
 .endif

 .if MARK_GC
	lea	g1,bit_counter
	lwz	o2,0(g1)
	li	g0,0

	tst	o2
	beq	no_scan

	mtctr	o2

	lea	o4,heap_end_after_gc
	lea	a0,bit_vector_p
	lwz	o4,0(o4)
	lwz	a0,0(a0)
	sub	o4,o4,a6
	srwi	o4,o4,2
	sub	o4,o4,d7

scan_bits:
	lwz	o0,0(a0)
	addi	a0,a0,4
	cmpwi	o0,0
	beq	zero_bits
	stw	g0,-4(a0)
	bdnz	scan_bits

	b	end_scan

zero_bits:
	mr	a1,a0
	bdnz	skip_zero_bits_lp+4
	b	end_bits

skip_zero_bits_lp:
	bne	end_zero_bits
	lwz	o3,0(a0)
	addi	a0,a0,4
	tst	o3
	bdnz	skip_zero_bits_lp

	beq	end_bits
	stw	g0,-4(a0)
	sub	o3,a0,a1
	b	end_bits2

end_zero_bits:
	lea	g1,free_after_mark

	sub	o3,a0,a1
	slwi	o3,o3,3

	cmplw	0,o3,o4

	lwz	o1,0(g1)
	stw	g0,-4(a0)

	add	o1,o1,o3
	stw	o1,0(g1)
	blt	scan_bits

found_free_memory:
	mfctr	o2
	lea	o1,bit_counter
	lea	g1,bit_vector_p
	stw	o2,0(o1)
	stw	a0,0(g1)

	lea	o1,heap_vector
	sub	d7,o3,o4

	lwz	o1,0(o1)
	subi	o2,a1,4
	lea	g1,heap_p3
	sub	o2,o2,o1
	lwz	o1,0(g1)
	slwi	o2,o2,5

	add	a6,o2,o1

	slwi	o3,o3,2
	lea	g1,heap_end_after_gc
	add	o2,a6,o3
	stw	o2,0(g1)

 .if USE_DCBZ
 	subi	d7,d7,15
	li	g2,32
 .endif
	subi	a6,a6,4
	blr	

end_bits:
	sub	o3,a0,a1
	addi	o3,o3,4
end_bits2:
	lea	g1,free_after_mark

	slwi	o3,o3,3

	lwz	o1,0(g1)
	cmplw	0,o3,o4
	add	o1,o1,o3
	stw	o1,0(g1)
	bge	found_free_memory

end_scan:
	mfctr	o2
	lea	g1,bit_counter
	stw	o2,0(g1)
no_scan:
 .endif

 .if MARK_AND_COPY_GC
no_mark3:
 .endif
	mflr	r0
	stwu	r0,-4(sp)

	subi	sp,sp,28
	stw	d0,0(sp)
	stw	d1,4(sp)
	stw	d2,8(sp)
	stw	d3,12(sp)
	stw	d4,16(sp)

	lea	g1,garbage_collect_flag

	stw	d5,20(sp)

	lbz	o0,0(g1)

	stw	d6,24(sp)

	extsb	o0,o0
	cmpwi	0,o0,0
	ble	collect

	subi	o0,o0,2
	stb	o0,0(g1)

	lea	o0,heap_end_after_gc
	lwz	d0,0(o0)
	sub	d0,d0,a6
	srwi	d0,d0,2
	lea	o0,extra_heap_size
	sub	d0,d0,d7
	lwz	d1,0(o0)
	cmplw	0,d0,d1
	bgt	collect

	lea	o0,extra_heap_size
	lwz	d1,0(o0)

	lea	o0,extra_heap

	sub	d7,d1,d0

	lwz	a6,0(o0)
	slwi	d1,d1,2
	lea	o0,heap_end_after_gc
	add	d1,d1,a6
	stw	d1,0(o0)

	lwz	d0,0(sp)
	lwz	d1,4(sp)
	lwz	d2,8(sp)
	lwz	d3,12(sp)
	lwz	d4,16(sp)
	lwz	d5,20(sp)
	lwz	d6,24(sp)

	lwz	r0,28(sp)
	mtlr	r0

 .if USE_DCBZ
 	subi	d7,d7,15
	li	g2,32
 .endif
	subi	a6,a6,4

	addi	sp,sp,32
	blr	

collect:
	bl	_add_execute_time

	lea	o1,_flags
	lwz	o0,0(o1)
	andi.	r0,o0,4
	beq	no_print_stack_sizes
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	lea	o0,garbage_collect_string_1
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop

	lea	o0,stack_p
	lwz	a0,0(o0)
	sub	o0,a4,a0
 .if MACOSX
	lea	o1,_halt_sp
	lwz	d0,0(o1)
 .else
	lea	o1,_stack_size
	lwz	o2,0(o1)
	add	d0,a0,o2
 .endif
	sub	d0,d0,sp
 .if STDERR_TO_FILE
	bl	_er_print_int
 .else
	bl	_ew_print_int
 .endif
	nop

	lea	o0,garbage_collect_string_2
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop

	mr	o0,d0
 .if STDERR_TO_FILE
	bl	_er_print_int
 .else
	bl	_ew_print_int
 .endif
	nop

	lea	o0,garbage_collect_string_3
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
	nop
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
no_print_stack_sizes:
	cmplw	0,a4,sp
	bgt	stack_overflow

 .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	bne	compacting_collector
 .else
  .if MARK_GC
	b	compacting_collector
  .endif
 .endif

 .if MARK_AND_COPY_GC | !MARK_GC
	lea	o0,garbage_collect_flag
	lbz	o1,0(o0)
	extsb.	o1,o1
	bne	compacting_collector

 .if COPIED_VECTOR
	lea	o1,heap_end_after_copy_gc
	li	g0,0
	lwz	a1,0(o1)
	lea	a2,heap_copied_vector
	tst	a1

	lea	o0,heap_copied_vector_size
	lwz	a2,0(a2)
	lwz	d1,0(o0)

	beq	zero_all

	lea	o0,heap_p1
	stw	g0,0(o1)
	lwz	a0,0(o0)
	sub	d0,a6,a0
	addi	d0,d0,63*4
	srwi	d0,d0,8
	bl	zero_bit_vector

	sub	d2,a1,a0
	lea	a2,heap_copied_vector
	clrrwi	d2,d2,8
	lwz	a2,0(a2)
	srwi	d2,d2,6
	add	a2,a2,d2

	sub	d0,d1,d2
	srwi	d0,d0,2
	bl	zero_bit_vector

	b	end_zero_bit_vector

zero_all:
	srwi	d0,d1,2 
	bl	zero_bit_vector

end_zero_bit_vector:
 .endif

# comment calculate alloc_size
	lea	o0,heap_end_after_gc
	lwz	d0,0(o0)
	lea	o1,alloc_size
	sub	d0,d0,a6
	srwi	d0,d0,2
	sub	d0,d0,d7
	stw	d0,0(o1)

#include	"pcopy.a"

 .if WRITE_HEAP
	lea	o0,heap2_begin_and_end
	stw	o4,0(o0)
 .endif

	lea	o0,heap_end_after_gc
	stw	o4,0(o0)

	sub	d7,o4,a6
	srwi	d7,d7,2

	bl	.add_garbage_collect_time

	lea	o0,alloc_size
	lwz	o1,0(o0)
	sub.	d7,d7,o1
	blt	switch_to_mark_scan
# comment	bneg	out_of_memory_4

	slwi	d0,d7,2
	add	d0,d0,d7
	slwi	d0,d0,5
	lea	o0,_heap_size
	lwz	d2,0(o0)
	slwi	d1,d2,2
	add	d1,d1,d2
	slwi	d1,d1,1
	add	d1,d1,d2
	cmplw	0,d0,d1
	bge	no_mark_scan
# comment	b	no_mark_scan

switch_to_mark_scan:
	lea	o0,heap_size_33
	lwz	d0,0(o0)
	slwi	d0,d0,5
	lea	o0,heap_p
	lwz	d1,0(o0)

	lea	o0,heap_p1
	lwz	d2,0(o0)
	lea	o0,heap_p2
	lwz	o1,0(o0)
	cmplw	0,d2,o1
	blt	vector_at_begin
		
vector_at_end:
	lea	o0,heap_p3
	stw	d1,0(o0)
	add	d1,d1,d0
	lea	o0,heap_vector
	stw	d1,0(o0)
		
	lea	o0,heap_p1
	lwz	d0,0(o0)
	lea	o0,extra_heap
	stw	d0,0(o0)
	sub	d1,d1,d0
	srwi	d1,d1,2
	lea	o0,extra_heap_size
	stw	d1,0(o0)
	b	switch_to_mark_scan_2

vector_at_begin:
	lea	o0,heap_vector
	stw	d1,0(o0)
	lea	o1,_heap_size
	lwz	o0,0(o1)
	add	d1,d1,o0
	sub	d1,d1,d0
	lea	o0,heap_p3
	stw	d1,0(o0)
		
	lea	o0,extra_heap
	stw	d1,0(o0)
	lea	o0,heap_p2
	lwz	d2,0(o0)
	sub	d2,d2,d1
	srwi	d2,d2,2
	lea	o0,extra_heap_size
	stw	d2,0(o0)

switch_to_mark_scan_2:
	lea	o0,_heap_size
	lwz	d0,0(o0)
	srwi	d0,d0,3
	sub	d0,d0,d7
	slwi	d0,d0,2
		
	lea	o0,garbage_collect_flag
	li	o1,1
	stb	o1,0(o0)
		
	cmpwi	0,d7,0
	bge	end_garbage_collect
	
	li	o1,-1
	stb	o1,0(o0)
		
	lea	o0,extra_heap_size
	lea	o1,alloc_size
	lwz	d1,0(o0)
	lwz	d7,0(o1)
	sub.	d7,d1,d7
	blt	out_of_memory_4

	lea	o0,extra_heap
	lea	o1,heap_end_after_gc
 .if WRITE_HEAP
	mr	d2,a6
 .endif
	lwz	a6,0(o0)
	slwi	d1,d1,2
	add	d1,d1,a6
	stw	d1,0(o1)
 .if WRITE_HEAP
 	li	d3,1
	b	end_garbage_collect_
 .else
	b	end_garbage_collect
 .endif

no_mark_scan:
# comment exchange the semi_spaces

	lea	o0,heap_p1
	lea	o1,heap_p2
	lwz	d0,0(o0)
	lwz	d1,0(o1)
	stw	d0,0(o1)
	stw	d1,0(o0)

 .if COPIED_VECTOR
	lea	o0,heap_size_129
	lwz	d1,0(o0)
	slwi	d1,d1,6-2
 .else
	lea	o0,_heap_size
	lwz	d1,0(o0)
	srwi	d1,d1,3
 .endif
	sub	d0,d1,d7

  .if ADJUST_HEAP_SIZE
	lea	o0,_heap_size_multiple
	lwz	o0,0(o0)

	mullw	d2,d0,o0
	mulhwu	o0,d0,o0

	rlwinm	d2,d2,32-9,9,31-2
# comment	srwi	d2,d2,9

	rlwimi	d2,o0,32-9,0,8
	srwi.	o0,o0,9
	bne	no_small_heap1

	cmplwi	d2,MINIMUM_HEAP_SIZE/2
	bge	not_too_small1
	li	d2,MINIMUM_HEAP_SIZE/2
not_too_small1:

	sub.	d2,d1,d2
	blt	no_small_heap1
	
	sub	d7,d7,d2
	lea	o0,heap_end_after_gc
	slwi	d2,d2,2
	lwz	d1,0(o0)
	sub	d2,d1,d2
	lea	o1,heap_end_after_copy_gc
	stw	d2,0(o0)
	stw	d1,0(o1)

no_small_heap1:
  .endif

	slwi	d0,d0,2	
 .endif

end_garbage_collect:
 .if WRITE_HEAP
	mr	d2,a6
	li	d3,0
end_garbage_collect_:
 .endif
	lea	o0,_flags
	lwz	o1,0(o0)
	andi.	r0,o1,2
	beq+	no_heap_use_message

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	lea	o0,heap_use_after_gc_string_1
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

	mr	o0,d0
 .if STDERR_TO_FILE
	bl	_er_print_int
 .else
	bl	_ew_print_int
 .endif

	lea	o0,heap_use_after_gc_string_2
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif
no_heap_use_message:
 .if FINALIZERS
	bl	call_finalizers
 .endif

 .if WRITE_HEAP
 	.globl	first_function
 	.globl	_write_heap
	.globl	min_write_heap_size

	lea	o0,_flags
	lea	o1,min_write_heap_size

	lwz	o0,0(o0)
	lwz	o1,0(o1)

	andi.	r0,o0,32
	beq	no_write_heap

	cmplw	0,d0,o1
	blt	no_write_heap

	subi	sp,sp,64

	lea	r3,garbage_collect_flag
	cmpwi	d3,0
	
	lea	r7,heap2_begin_and_end
	lbz	r3,0(r3)
	lwz	r5,0(r7)
	bne	copy_to_compact_with_alloc_in_extra_heap

	extsb.	r3,r3
	lwz	r6,4(r7)

	lea	r4,heap_p1
	beq	gc0
	lea	r4,heap_p2
	bgt	gc1
	lea	r4,heap_p3
	li	r5,0
	li	r6,0
gc0:	
gc1:
	lwz	r4,0(r4)
	mr	r10,sp
	stw	r4,0(r10)
	stw	d2,4(r10)
	stw	r5,8(r10)
	stw	r6,12(r10)

	lea	r6,stack_p
	lea	r8,first_function
	lwz	r6,0(r6)

 	li	r9,0

	lwz	r8,0(r8)

	stw	r6,16(r10)
	stw	a4,20(r10)
	stw	r8,24(r10)
	stw	r9,28(r10)

	lea	r4,small_integers
	lea	r5,static_characters
	stw	r4,32(r10)
	stw	r5,36(r10)

	stw	r16,40(r10)
	stw	r15,44(r10)
	stw	r14,48(r10)
	stw	r13,52(r10)
	lea	d0,__STRING__+2
	lea	d1,__ARRAY__+2
	stw	d0,56(r10)
	stw	d1,60(r10)
	
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif

	mr	r3,r10
	bl	_write_heap
	nop

 .if MACOSX
 	lwz	sp,0(sp)
	addi	sp,sp,64
 .else
	addi	sp,sp,128
 .endif
no_write_heap:

 .endif

	lwz	d0,0(sp)
	lwz	d1,4(sp)
	lwz	d2,8(sp)
	lwz	d3,12(sp)
	lwz	d4,16(sp)
	lwz	d5,20(sp)
	lwz	d6,24(sp)

	lwz	r0,28(sp)
	mtlr	r0

 .if USE_DCBZ
 	subi	d7,d7,15
	li	g2,32
 .endif
	subi	a6,a6,4

	addi	sp,sp,32
	blr

 .if FINALIZERS
call_finalizers:
	lea	d0,free_finalizer_list
	lwz	d0,0(d0)

call_finalizers_lp:
	lea	o0,__Nil-8
	cmplw	d0,o0
	beq	end_call_finalizers
	
	lwz	d1,8(d0)
	lwz	d0,4(d0)
	mflr	d2

	lwz	r12,0(d1)
	lwz	r3,4(d1)

	mtctr	r12

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif

	bctrl
	
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,64
 .endif

	mtlr	d2
	b	call_finalizers_lp
end_call_finalizers:
	lea	d0,free_finalizer_list
	stw	o0,0(d0)
	blr
 .endif

 .if WRITE_HEAP
copy_to_compact_with_alloc_in_extra_heap:
	lwz	r6,4(r7)
	lea	r4,heap_p2
	b	gc1	
 .endif

out_of_memory_4:
	bl	.add_garbage_collect_time

	lea	o0,out_of_memory_string_4
	b	print_error

	.text
# comment	d0 = n words
# comment	a2 = address
# comment	g0 = 0
zero_bit_vector:
	andi.	r0,d0,1
	srwi	d0,d0,1
	beq	zero_bits1_1

	stw	g0,0(a2)
	addi	a2,a2,4
zero_bits1_1:
	andi.	r0,d0,1
	srwi	d0,d0,1
	beq	zero_bits1_5

	subi	a2,a2,8
	b	zero_bits1_2

zero_bits1_4:
	stw	g0,0(a2)
	stw	g0,4(a2)
zero_bits1_2:
	stw	g0,8(a2)
	stw	g0,12(a2)
	addi	a2,a2,16
zero_bits1_5:
	subic.	d0,d0,1
	bge	zero_bits1_4

	blr

	.text
reorder:
	mr	d2,d0
	mr	d3,d1
	slwi	d4,d0,2
	slwi	d5,d1,2
	add	a0,a0,d5
	sub	a1,a1,d4
	b	st_reorder_lp

reorder_lp:
	lwzu	o0,-4(a1)
	subic.	d2,d2,1

	lwz	o1,0(a0)
	stw	o0,0(a0)
	addi	a0,a0,4

	bne+	next_b_in_element
	mr	d2,d0
	add	a0,a0,d5
next_b_in_element:

	subic.	d3,d3,1
	stw	o1,0(a1)

	bne+	next_a_in_element
	mr	d3,d1
	sub	a1,a1,d4
next_a_in_element:

st_reorder_lp:
	cmplw	1,a1,a0
	bgt	cr1,reorder_lp

	blr
	
# comment
# comment	the sliding compacting garbage collector
# comment

	.text
compacting_collector:

# comment zero all mark bits

	lea	o0,heap_p3
	lea	o1,heap_vector
	lwz	d6,0(o0)
	lea	o0,heap_end_after_gc
	lwz	o4,0(o1)
	lwz	d5,0(o0)
	sub	d5,d5,a6
	srwi	d5,d5,2

	lea	o0,alloc_size
	sub	d5,d5,d7
	stw	d5,0(o0)

 .if MARK_GC
  .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark4
  .endif

	lea	o0,zero_bits_before_mark
	li	g0,0
	lwz	o1,0(o0)
	cmpwi	0,o1,0
	beq	no_zero_bits

	stw	g0,0(o0)

  .if MARK_AND_COPY_GC
no_mark4:
  .endif
 .endif

	lea	o0,heap_size_33
	mr	a2,o4
	lwz	d0,0(o0)
	addi	d0,d0,3
	srwi	d0,d0,2

	li	o0,0

	andi.	r0,d0,1
	srwi	d0,d0,1
	beq	zero_bits_1
		
	stw	o0,0(a2)
	addi	a2,a2,4
zero_bits_1:

	andi.	r0,d0,1
	srwi	d0,d0,1
	beq	zero_bits_5

	subi	a2,a2,8
	b	zero_bits_2

zero_bits_4:
	stw	o0,0(a2)
	stw	o0,4(a2)
zero_bits_2:
	stw	o0,8(a2)
	stw	o0,12(a2)
	addi	a2,a2,16
zero_bits_5:
	subic.	d0,d0,1
	bge	zero_bits_4

 .if MARK_GC
  .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark5
  .endif

no_zero_bits:
	lea	o0,last_heap_free
	lea	o1,free_after_mark
	lwz	d0,0(o0)
	lwz	d1,0(o1)
	slwi	d1,d1,2

	slwi	d2,d1,3
	add	d2,d2,d1
	srwi	d2,d2,2

	cmplw	d0,d2
	bgt	compact_gc

  .if ADJUST_HEAP_SIZE
	lea	o0,bit_vector_size
	lwz	d1,0(o0)
	lea	o0,_heap_size_multiple
	slwi	d1,d1,2
	lwz	o0,0(o0)
	sub	o2,d1,d0

	mullw	o1,o2,o0
	mulhwu	o2,o2,o0

	rlwinm	o1,o1,32-7,7,31-2
# comment	srwi	o1,o1,7

	rlwimi	o1,o2,32-7,0,6
	srwi.	o2,o2,7
	bne	no_smaller_heap

	cmplw	o1,d1
	bge	no_smaller_heap

	cmplwi	d1,MINIMUM_HEAP_SIZE
	ble	no_smaller_heap

	b	compact_gc

no_smaller_heap:
  .endif

#include	"pmark.a"

compact_gc:
	lea	o0,zero_bits_before_mark
	li	d0,1
	stw	d0,0(o0)
	lea	o0,last_heap_free
	li	g0,0
	stw	g0,0(o0)
	lea	o0,free_after_mark
	li	o1,1000
	stw	o1,0(o0)
 .endif

   .if MARK_AND_COPY_GC
no_mark5:
   .endif

#include	"pcompact.a"

	lea	o0,heap_size_33
	lwz	d7,0(o0)
	lea	o0,heap_end_after_gc
	slwi	d7,d7,5
	add	d7,d7,d6
	stw	d7,0(o0)

	lea	o0,alloc_size
	sub	d7,d7,a6
	lwz	d1,0(o0)
	srwi	d7,d7,2
	sub.	d7,d7,d1
	blt	out_of_memory_4

	slwi	d0,d7,2
	lea	o0,_heap_size
	add	d0,d0,d7
	lwz	o1,0(o0)
	slwi	d0,d0,3
	cmplw	0,d0,o1
	blt	out_of_memory_4

 .if MARK_GC | COMPACT_GC_ONLY
  .if MARK_GC & ADJUST_HEAP_SIZE
   .if MARK_AND_COPY_GC
 	lea	o0,_flags
	lwz	o0,0(o0)
	andi.	r0,o0,64
	beq	no_mark6
   .endif

	sub	d0,a6,d6
	lea	o0,_heap_size_multiple
	slwi	d1,d1,2
	lwz	o0,0(o0)
	add	o2,d0,d1

	lea	d1,heap_size_33
	lwz	d1,0(d1)
	slwi	d1,d1,5

	mullw	d0,o2,o0
	mulhwu	o0,o2,o0

	rlwinm	d0,d0,32-8,8,31-2
# comment	srwi	d0,d0,8
	rlwimi	d0,o0,32-8,0,7
# comment	clrrwi	d0,d0,2
	
	srwi.	o0,o0,8
	bne	no_small_heap2

	cmplwi	d0,MINIMUM_HEAP_SIZE
	bge	not_too_small2
	li	d0,MINIMUM_HEAP_SIZE
not_too_small2:

	sub.	d2,d1,d0
	blt	no_small_heap2

	lea	o1,heap_end_after_gc
	srwi	o0,d2,2
	lwz	d1,0(o1)
	sub	d7,d7,o0
	sub	d1,d1,d2
	stw	d1,0(o1)

	mr	d1,d0

no_small_heap2:
	lea	o0,bit_vector_size
	srwi	d1,d1,2
	stw	d1,0(o0)

   .if MARK_AND_COPY_GC
no_mark6:
   .endif
  .endif
	b	no_copy_garbage_collection
 .else
	lea	o0,_heap_size
	slwi	d0,d0,2
	lwz	d1,0(o0)
	lwz	o1,0(o0)
	slwi	d1,d1,5
	sub	d1,d1,o1
	cmpw	0,d0,d1

	ble	no_copy_garbage_collection
# comment	b	no_copy_garbage_collection

	lea	o0,heap_p
	lwz	d0,0(o0)
	lea	o0,heap_p1
	stw	d0,0(o0)
 .if COPIED_VECTOR
	lea	o0,heap_size_129
	lwz	d1,0(o0)
	slwi	d1,d1,6
	add	d0,d0,d1
	lea	o0,heap_copied_vector
	lea	o1,heap_end_after_gc
	stw	d0,0(o0)
	lea	o0,heap_copied_vector_size
	stw	d0,0(o1)
	lwz	d1,0(o0)
	lea	o0,heap_p2
	add	d1,d1,d0
	stw	d1,0(o0)
 .else
	lea	o0,_heap_size
	lwz	d1,0(o0)
	srwi	d1,d1,1
	add	d0,d0,d1
	lea	o0,heap_p2
	stw	d0,0(o0)
	lea	o0,heap_end_after_gc
	stw	d0,0(o0)
 .endif
	sub	d0,d0,a6
	srwi	d0,d0,2
	mr	d7,d0
	lea	o0,alloc_size
	lwz	o1,0(o0)
	sub	d7,d7,o1
		
	lea	o0,heap_p3
	lwz	d0,0(o0)
	lea	o0,heap_vector
	lwz	o1,0(o0)
	cmpw	0,d0,o1
	ble	vector_at_end_2

	lea	o0,heap_vector
	lwz	d1,0(o0)
	lea	o0,extra_heap
	stw	d1,0(o0)
	sub	d0,d0,d1
	srwi	d0,d0,2
	lea	o0,extra_heap_size
	stw	d0,0(o0)

	lea	o0,garbage_collect_flag
	li	o1,2
	stb	o1,0(o0)
		
	b	no_copy_garbage_collection

vector_at_end_2:
	lea	o0,garbage_collect_flag
	li	o1,0
	stb	o1,0(o0)
 .endif

no_copy_garbage_collection:
	bl	.add_garbage_collect_time

	lea	o0,alloc_size
	sub	d0,a6,d6
	lwz	d1,0(o0)
	slwi	d1,d1,2
		
	add	d0,d0,d1
	b	end_garbage_collect

_stack_overflow:
stack_overflow:
	lea	o0,_halt_sp
	lwz	sp,0(o0)

	bl	_add_execute_time

	lea	o0,stack_overflow_string
	b	print_error

_IO_error:
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(128+28)(sp)
 .else
	stwu	sp,-128(sp)
 .endif
	stw	o0,124(sp)

	lea	o0,IO_error_string
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
		
	lwz	o0,124(sp)

 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

	lea	o0,new_line_string
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif

 .if MACOSX
 	lwz	sp,0(sp)
 .else
	addi	sp,sp,128
 .endif
	b	halt

print_error:
 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
 .if STDERR_TO_FILE
	bl	_er_print_string
 .else
	bl	_ew_print_string
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 .else
	baddi	sp,64
 .endif

halt:

	lea	o0,_halt_sp
	lwz	sp,0(o0)

 .if PROFILE
	mflr	r0
	stwu	r0,-4(sp)
	bl	write_profile_stack
	mtlr	r0
 .endif

 .if EXCEPTIONS
	lea	o0,exception_info
	lwz	o0,0(o0)
	cmpwi	0,o0,0
	bne	e__Exceptions__sraise__exception
 .endif
 
 .if 0
	lea	o0,_flags
	lwz	d0,0(o0)
	andi.	r0,d0,8
	bne	exit
	
	andi.	r0,d0,16
	beq	exit

  .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
  .else
	stwu	sp,-64(sp)
  .endif
	bl	_wait_for_key_press
  .if MACOSX
 	lwz	sp,0(sp)
  .else
	baddi	sp,64
  .endif
 .else
	lea	o0,_execution_aborted
	li	d0,1
	stw	d0,0(o0)
 .endif
	b	exit

 .if EXCEPTIONS
e__Exceptions__scatch__exception:
	lea	o0,exception_info
	mflr	d0
	stw	a4,0(o0)
	stw	sp,4(o0)
	stw	d0,8(o0)

	li	d0,0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

e__Exceptions__sraise__exception:
	lea	o0,exception_info
	li	d0,-1

	lwz	o1,8(o0)
	lwz	sp,4(o0)
	mtlr	o1
	lwz	a4,0(o0)

	li	o1,0
	stw	o1,0(o0)
	
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
 .endif

	.text
# __TEXT.eval_01:

eval_01:
	stw	a1,0(a4)
	addi	a4,a4,4
	bctr

	.text
# __TEXT.eval_11:

eval_11:
	stw	a0,0(a4)
	mr	a0,a1
	addi	a4,a4,4
	bctr

	.text
# __TEXT.eval_02:

eval_02:
	stw	a2,0(a4)
	addi	a4,a4,8
	stw	a1,4-8(a4)
	bctr

	.text
# __TEXT.eval_12:

eval_12:
	stw	a0,4(a4)
	mr	a0,a1
	stw	a2,0(a4)
	addi	a4,a4,8
	bctr

	.text
# __TEXT.eval_22:

eval_22:
	stw	a0,4(a4)
	mr	a0,a2
	stw	a1,0(a4)
	addi	a4,a4,8
	bctr

# __TEXT.__eaind:

__eaind:
eval_fill:
	stw	a0,0(a4)
	mr	a0,a1
	lwz	a1,0-NODE_POINTER_OFFSET(a1)
	addi	a4,a4,4

	mtctr	a1
	mflr	r0
	stwu	r0,-4(sp)
	bctrl
	mtlr	r0

	mr	a1,a0
	lwzu	a0,-4(a4)
	
	lwz	g0,0-NODE_POINTER_OFFSET(a1)
	lwz	g1,4-NODE_POINTER_OFFSET(a1)
	stw	g0,0-NODE_POINTER_OFFSET(a0)
	lwz	g0,8-NODE_POINTER_OFFSET(a1)
	stw	g1,4-NODE_POINTER_OFFSET(a0)
	stw	g0,8-NODE_POINTER_OFFSET(a0)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

# __TEXT.__indirection:

	b	eval_fill
	nop	
	nop	
 .if LINUX | MACOSX
	nop
	nop
 .endif
	.long	0
	.long	-2
__indirection:
	lwz	a1,4(a0)
	lwz	d0,0(a1)
	andi.	r0,d0,2
 .if MARK_GC
	beq	eval_fill2
 .else
	beq	_cycle__in__spine
 .endif
	stw	d0,0(a0)
	lwz	g0,4(a1)
	lwz	g1,8(a1)
	stw	g0,4(a0)
	stw	g1,8(a0)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

_cycle__in__spine:
	b 	__cycle__in__spine

 .if MARK_GC
 	.text
eval_fill2:
   .if MARK_AND_COPY_GC
 	lea	o0,_flags
	stw	a5,0-NODE_POINTER_OFFSET(a0)
	lwz	o0,0(o0)
	stw	a0,0(a4)
	andi.	r0,o0,64
	beq	_cycle__in__spine
   .else
	stw	a5,0-NODE_POINTER_OFFSET(a0)
	stw	a0,0(a4)
   .endif		
	addi	a4,a4,4
	mr	a0,a1

	mtctr	d0
	mflr	r0
	stwu	r0,-4(sp)
	bctrl
	mtlr	r0

	lwzu	a1,-4(a4)
	lwz	o0,0-NODE_POINTER_OFFSET(a0)
	lwz	o1,4-NODE_POINTER_OFFSET(a0)
	stw	o0,0-NODE_POINTER_OFFSET(a1)
	lwz	o0,8-NODE_POINTER_OFFSET(a0)
	stw	o1,4-NODE_POINTER_OFFSET(a1)
	stw	o0,8-NODE_POINTER_OFFSET(a1)
	mr	a0,a1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
 .endif

	.text
# __TEXT.eval_upd_0:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_0:
	lea	a3,__indirection
	mtctr	a2
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	stw	a3,0-NODE_POINTER_OFFSET(a1)
	bctr

	.text
# __TEXT.eval_upd_1:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_1:
	lea	a3,__indirection
	mtctr	a2
	lwz	d0,4-NODE_POINTER_OFFSET(a1)
	stw	a3,0-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	mr	a1,d0
	bctr

	.text
# __TEXT.eval_upd_2:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_2:
	mtctr	a2
	lea	a2,__indirection
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	lwz	a1,8-NODE_POINTER_OFFSET(a1)
	bctr

	.text
# __TEXT.eval_upd_3:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_3:
	mtctr	a2
	lea	a2,__indirection
	stw	a0,0(a4)
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	addi	a4,a4,4
	lwz	a0,12-NODE_POINTER_OFFSET(a1)
	lwz	a1,8-NODE_POINTER_OFFSET(a1)
	bctr

	.text
# __TEXT.eval_upd_4:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_4:
	mtctr	a2
	lea	a2,__indirection
	stw	a0,0(a4)
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	lwz	g1,16-NODE_POINTER_OFFSET(a1)
	lwz	a0,12-NODE_POINTER_OFFSET(a1)
	stw	g1,4(a4)
	addi	a4,a4,8
	lwz	a1,8-NODE_POINTER_OFFSET(a1)
	bctr

	.text
# __TEXT.eval_upd_5:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_5:
	mtctr	a2
	lea	a2,__indirection
	stw	a0,0(a4)
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	lwz	g1,20-NODE_POINTER_OFFSET(a1)
	lwz	a0,12-NODE_POINTER_OFFSET(a1)
	stw	g1,4(a4)
	lwz	g1,16-NODE_POINTER_OFFSET(a1)
	lwz	a1,8-NODE_POINTER_OFFSET(a1)
	stw	g1,8(a4)
	addi	a4,a4,12
	bctr

	.text
# __TEXT.eval_upd_6:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_6:
	mtctr	a2
	lea	a2,__indirection
	stw	a0,0(a4)
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	lwz	g1,24-NODE_POINTER_OFFSET(a1)
	lwz	a0,12-NODE_POINTER_OFFSET(a1)
	stw	g1,4(a4)
	lwz	g1,20-NODE_POINTER_OFFSET(a1)
	stw	g1,8(a4)
	lwz	g1,16-NODE_POINTER_OFFSET(a1)
	lwz	a1,8-NODE_POINTER_OFFSET(a1)
	stw	g1,12(a4)
	addi	a4,a4,16
	bctr

	.text
# __TEXT.eval_upd_7:

 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_7:
	li	d0,0
	li	d1,20
eval_upd_n:
	mtctr	a2
	lea	a2,__indirection
	stw	a0,0(a4)
	stw	a2,0-NODE_POINTER_OFFSET(a1)
	lwz	a2,4-NODE_POINTER_OFFSET(a1)
	stw	a0,4-NODE_POINTER_OFFSET(a1)
	add	a1,a1,d1
	lwz	g1,8-NODE_POINTER_OFFSET(a1)
	stw	g1,4(a4)
	lwz	g1,4-NODE_POINTER_OFFSET(a1)
	stw	g1,8(a4)
	lwz	g1,0-NODE_POINTER_OFFSET(a1)
	stw	g1,12(a4)
	addi	a4,a4,16
eval_upd_n_lp:
	lwz	g1,-4-NODE_POINTER_OFFSET(a1)
	subi	a1,a1,4
	stw	g1,0(a4)
	subic.	d0,d0,1
	addi	a4,a4,4
	bge	eval_upd_n_lp

	lwz	a0,-4-NODE_POINTER_OFFSET(a1)
	lwz	a1,-8-NODE_POINTER_OFFSET(a1)
	bctr

# __TEXT.eval_upd_8:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_8:
	li	d0,1
	li	d1,24
	b	eval_upd_n
# __TEXT.eval_upd_9:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_9:
	li	d0,2
	li	d1,28
	b	eval_upd_n
# __TEXT.eval_upd_10:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_10:
	li	d0,3
	li	d1,32
	b	eval_upd_n
# __TEXT.eval_upd_11:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_11:
	li	d0,4
	li	d1,36
	b	eval_upd_n
# __TEXT.eval_upd_12:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_12:
	li	d0,5
	li	d1,40
	b	eval_upd_n
# __TEXT.eval_upd_13:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_13:
	li	d0,6
	li	d1,44
	b	eval_upd_n
# __TEXT.eval_upd_14:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_14:
	li	d0,7
	li	d1,48
	b	eval_upd_n
# __TEXT.eval_upd_15:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_15:
	li	d0,8
	li	d1,52
	b	eval_upd_n
# __TEXT.eval_upd_16:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_16:
	li	d0,9
	li	d1,56
	b	eval_upd_n
# __TEXT.eval_upd_17:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_17:
	li	d0,10
	li	d1,60
	b	eval_upd_n
# __TEXT.eval_upd_18:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_18:
	li	d0,11
	li	d1,64
	b	eval_upd_n
# __TEXT.eval_upd_19:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_19:
	li	d0,12
	li	d1,68
	b	eval_upd_n
# __TEXT.eval_upd_20:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_20:
	li	d0,13
	li	d1,72
	b	eval_upd_n
# __TEXT.eval_upd_21:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_21:
	li	d0,14
	li	d1,76
	b	eval_upd_n
# __TEXT.eval_upd_22:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_22:
	li	d0,15
	li	d1,80
	b	eval_upd_n
# __TEXT.eval_upd_23:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_23:
	li	d0,16
	li	d1,84
	b	eval_upd_n
# __TEXT.eval_upd_24:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_24:
	li	d0,17
	li	d1,88
	b	eval_upd_n
# __TEXT.eval_upd_25:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_25:
	li	d0,18
	li	d1,92
	b	eval_upd_n
# __TEXT.eval_upd_26:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_26:
	li	d0,19
	li	d1,96
	b	eval_upd_n
# __TEXT.eval_upd_27:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_27:
	li	d0,20
	li	d1,100
	b	eval_upd_n
# __TEXT.eval_upd_28:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_28:
	li	d0,21
	li	d1,104
	b	eval_upd_n
# __TEXT.eval_upd_29:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_29:
	li	d0,22
	li	d1,108
	b	eval_upd_n
# __TEXT.eval_upd_30:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_30:
	li	d0,23
	li	d1,112
	b	eval_upd_n
# __TEXT.eval_upd_31:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_31:
	li	d0,24
	li	d1,116
	b	eval_upd_n
# __TEXT.eval_upd_32:
 .if PROFILE
	mflr	r0
	bl	profile_n
 .endif
eval_upd_32:
	li	d0,25
	li	d1,120
	b	eval_upd_n

# comment
# comment	STRINGS
# comment
	.text
# __TEXT.catAC:

catAC:
 .if NODE_POINTER_OFFSET==0
	lwzu	d0,4(a0)
	lwzu	d1,4(a1)
 .else
	lwz	d0,4-NODE_POINTER_OFFSET(a0)
	baddi	a0,4
	lwz	d1,4-NODE_POINTER_OFFSET(a1)
	baddi	a1,4
 .endif
	add	d2,d0,d1
	addi	d5,d2,3+8
	srwi	d5,d5,2
	sub.	d7,d7,d5
# comment reserve one word extra, because 
# comment word after the string may change
	addi	d6,d2,3
	ble	gc_3
gc_r_3:

	lea	o1,__STRING__+2
	addi	d3,a6,4+NODE_POINTER_OFFSET
	stw	o1,4(a6)
	stwu	d2,8(a6)

# comment copy string 1

	addi	d2,d1,3
	srwi	d2,d2,2
	mr	a2,a6

	subic.	d2,d2,1
	blt	cat_string_4
cat_string_3:
 .if NODE_POINTER_OFFSET==0
	lwzu	o0,4(a1)
 .else
	lwz	o0,4-NODE_POINTER_OFFSET(a1)
	baddi	a1,4
 .endif
	subic.	d2,d2,1
	stwu	o0,4(a2)
	bge	cat_string_3
cat_string_4:

# comment copy string 2

	addi	d0,d0,3
	srwi	d0,d0,2
	subic.	d0,d0,1
	add	a2,a6,d1
	blt	cat_string_1

cat_string_0:
 .if NODE_POINTER_OFFSET==0
	lwzu	o0,4(a0)
 .else
	lwz	o0,4-NODE_POINTER_OFFSET(a0)
	baddi	a0,4
 .endif
	subic.	d0,d0,1
	stwu	o0,4(a2)
	bge	cat_string_0
cat_string_1:

	clrrwi	d6,d6,2
	mr	a0,d3
	add	a6,a6,d6

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_3:	subi	d7,d7,1
	subi	a0,a0,4
	subi	a1,a1,4
	mflr	r0
	bl	collect_2
	addi	a0,a0,4
	addi	a1,a1,4
	addi	d7,d7,1
	b	gc_r_3

	.text
empty_string:
	lea	a0,zero_length_string
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

# __TEXT.sliceAC:

sliceAC:
	lwz	d2,4-NODE_POINTER_OFFSET(a0)
	addi	a2,a0,4-NODE_POINTER_OFFSET
	cmpwi	0,d1,0
	bge	slice_string_1

	li	d1,0

slice_string_1:
	cmpw	0,d1,d2
	bge	empty_string
	cmpw	0,d0,d1
	addi	d0,d0,1
	blt	empty_string

	cmpw	0,d0,d2
	ble	slice_string_2

	mr	d0,d2

slice_string_2:
	sub	d0,d0,d1

	subi	d7,d7,2

	addi	d2,d0,3
	srwi	d2,d2,2

	sub.	d7,d7,d2
	blt	gc_4
r_gc_4:
	lea	o1,__STRING__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o1,4(a6)
	stwu	d0,8(a6)

	add	a2,a2,d1
	subic.	d2,d2,1
	blt	slice_string__1
		
slice_string__0:
	lwzu	o0,4(a2)
	subic.	d2,d2,1
	stwu	o0,4(a6)
	bge	slice_string__0
slice_string__1:

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_4:	mflr	r0
	bl	collect_1
	addi	a2,a0,4-NODE_POINTER_OFFSET
	b	r_gc_4

	.text
# __TEXT.updateAC:

updateAC:
	lwz	d2,4-NODE_POINTER_OFFSET(a0)
	addi	a2,a0,4-NODE_POINTER_OFFSET
	cmplw	0,d1,d2
	bge	update_string_error

	addi	d3,d2,3
	subi	d7,d7,2

	srwi	d3,d3,2		
	sub.	d7,d7,d3
	blt	gc_5
r_gc_5:
	lea	o1,__STRING__+2

	subic.	d3,d3,1

	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o1,4(a6)
	stwu	d2,8(a6)
	blt	update_string_5

update_string_4:
	lwzu	o0,4(a2)
	subic.	d3,d3,1
	stwu	o0,4(a6)
	bge	update_string_4
update_string_5:

	addi	d1,d1,8
	lwz	r0,0(sp)
	stbx	d0,a0,d1
	addi	sp,sp,4
	blr	

gc_5:	mflr	r0
	bl	collect_1
	addi	a2,a0,4-NODE_POINTER_OFFSET
	b	r_gc_5

		
update_string_error:
	lea	o0,high_index_string
	cmpwi	0,d1,0
	bge	print_error

	lea	o0,low_index_string
update_string_error_2:
	b	print_error

	.text
# __TEXT.eqAC:

eqAC:
	lwzu	d0,4-NODE_POINTER_OFFSET(a0)
	lwzu	o0,4-NODE_POINTER_OFFSET(a1)
	cmpw	0,d0,o0
	bne	equal_string_ne

	andi.	d1,d0,3
	srwi	d0,d0,2
	subic.	d0,d0,1
	blt	equal_string_b

equal_string_1:
	lwzu	o0,4(a1)
	lwzu	o1,4(a0)

	cmpw	o1,o0
	bne	equal_string_ne

	subic.	d0,d0,1
	bge	equal_string_1

equal_string_b:
	subic.	d1,d1,1
	blt	equal_string_eq

equal_string_2:
	lbz	o0,4(a1)
	addi	a1,a1,1
	lbz	o1,4(a0)
	addi	a0,a0,1
	cmpw	o1,o0
	bne	equal_string_ne

	subic.	d1,d1,1
	bge	equal_string_2

equal_string_eq:
	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
equal_string_ne:
	li	d0,0

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.cmpAC:

cmpAC:
	lwzu	d1,4-NODE_POINTER_OFFSET(a0)
	lwzu	d2,4-NODE_POINTER_OFFSET(a1)

	cmplw	0,d2,d1
	blt	cmp_string_less

	li	d0,0
	beq	cmp_string_chars

	li	d0,1
	b	cmp_string_chars	

cmp_string_less:
	li	d0,-1
	mr	d1,d2
cmp_string_chars:	
	andi.	d2,d1,3
	srwi	d1,d1,2
	subic.	d1,d1,1
	blt	cmp_string_b

cmp_string_1:
	lwzu	o0,4(a0)
	lwzu	o1,4(a1)

	cmplw	0,o1,o0
	bne	cmp_string_ne

	subic.	d1,d1,1
	bge	cmp_string_1

cmp_string_b:
	subic.	d2,d2,1
	blt	cmp_string_eq

cmp_string_2:
	lbz	o0,4(a0)
	lbz	o1,4(a1)
	addi	a0,a0,1

	cmplw	0,o1,o0
	addi	a1,a1,1
	bne	cmp_string_ne

	subic.	d2,d2,1
	bge	cmp_string_2

cmp_string_eq:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

cmp_string_ne:
	bgt	cmp_string_r1

	li	d0,-1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
cmp_string_r1:
	li	d0,1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.string_to_string_node:

string_to_string_node:
	lwz	d0,0(a0)
	addi	a0,a0,4

	addi	d1,d0,3
	srwi	d1,d1,2
		
	subi	d7,d7,2
	sub.	d7,d7,d1
	blt	string_to_string_node_gc

string_to_string_node_r:
	lea	o0,__STRING__+2
	stw	o0,4(a6)
	addi	d2,a6,4+NODE_POINTER_OFFSET
	stwu	d0,8(a6)
	b	string_to_string_node_4
		
string_to_string_node_2:
	lwz	o0,0(a0)
	addi	a0,a0,4
	stwu	o0,4(a6)
string_to_string_node_4:
	subic.	d1,d1,1
	bge	string_to_string_node_2

	mr	a0,d2

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

string_to_string_node_gc:
	mflr	r0
	stwu	a0,-4(sp)
	bl	collect_0

	lwz	a0,0(sp)
	addi	sp,sp,4
	b	string_to_string_node_r

	.text
	.long	3
# __TEXT._c3:
_c3:	b	__cycle__in__spine
	.long	4
# __TEXT._c4:
_c4:	b	__cycle__in__spine
	.long	5
# __TEXT._c5:
_c5:	b	__cycle__in__spine
	.long	6
# __TEXT._c6:
_c6:	b	__cycle__in__spine
	.long	7
# __TEXT._c7:
_c7:	b	__cycle__in__spine
	.long	8
# __TEXT._c8:
_c8:	b	__cycle__in__spine
	.long	9
# __TEXT._c9:
_c9:	b	__cycle__in__spine
	.long	10
# __TEXT._c10:
_c10:	b	__cycle__in__spine
	.long	11
# __TEXT._c11:
_c11:	b	__cycle__in__spine
	.long	12
# __TEXT._c12:
_c12:	b	__cycle__in__spine
	.long	13
# __TEXT._c13:
_c13:	b	__cycle__in__spine
	.long	14
# __TEXT._c14:
_c14:	b	__cycle__in__spine
	.long	15
# __TEXT._c15:
_c15:	b	__cycle__in__spine
	.long	16
# __TEXT._c16:
_c16:	b	__cycle__in__spine
	.long	17
# __TEXT._c17:
_c17:	b	__cycle__in__spine
	.long	18
# __TEXT._c18:
_c18:	b	__cycle__in__spine
	.long	19
# __TEXT._c19:
_c19:	b	__cycle__in__spine
	.long	20
# __TEXT._c20:
_c20:	b	__cycle__in__spine
	.long	21
# __TEXT._c21:
_c21:	b	__cycle__in__spine
	.long	22
# __TEXT._c22:
_c22:	b	__cycle__in__spine
	.long	23
# __TEXT._c23:
_c23:	b	__cycle__in__spine
	.long	24
# __TEXT._c24:
_c24:	b	__cycle__in__spine
	.long	25
# __TEXT._c25:
_c25:	b	__cycle__in__spine
	.long	26
# __TEXT._c26:
_c26:	b	__cycle__in__spine
	.long	27
# __TEXT._c27:
_c27:	b	__cycle__in__spine
	.long	28
# __TEXT._c28:
_c28:	b	__cycle__in__spine
	.long	29
# __TEXT._c29:
_c29:	b	__cycle__in__spine
	.long	30
# __TEXT._c30:
_c30:	b	__cycle__in__spine
	.long	31
# __TEXT._c31:
_c31:	b	__cycle__in__spine
	.long	32
# __TEXT._c32:
_c32:	b	__cycle__in__spine

# comment
# comment	ARRAYS
# comment

	.text
# __TEXT.create_arrayB:

create_arrayB:
	mr	d2,d1
	addi	d1,d1,3
	srwi	d1,d1,2
	subi	d7,d7,3
	sub.	d7,d7,d1
	bge+	no_collect_4575

	mflr	r0
	bl	collect_0

no_collect_4575:
	slwi	d3,d0,8
	or	d0,d0,d3
	slwi	d3,d0,16
	or	d0,d0,d3
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d2,8(a6)
	stwu	bool_reg,12(a6)
	b	create_arrayBCI

	.text
# __TEXT.create_arrayC:

create_arrayC:
	mr	d2,d1
	addi	d1,d1,3
	srwi	d1,d1,2
	subi	d7,d7,2
	sub.	d7,d7,d1
	bge+	no_collect_4578

	mflr	r0
	bl	collect_0

no_collect_4578:
	slwi	d3,d0,8
	or	d0,d0,d3
	slwi	d3,d0,16
	or	d0,d0,d3
	lea	o0,__STRING__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stwu	d2,8(a6)
	b	create_arrayBCI

	.text
# __TEXT.create_arrayI:

create_arrayI:
	subi	d7,d7,3
	sub.	d7,d7,d1
	bge+	no_collect_4577

	mflr	r0
	bl	collect_0

no_collect_4577:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d1,8(a6)
	stwu	int_reg,12(a6)

create_arrayBCI:
	andi.	o0,d1,1
	beq	st_filli_array

	stwu	d0,4(a6)

st_filli_array:
	srwi.	d1,d1,1
	beq	skip_filli_array

	mtctr	d1
filli_array:
	stw	d0,4(a6)
	stwu	d0,8(a6)
	bdnz	filli_array

skip_filli_array:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.create_arrayR:

create_arrayR:
	stfd	f14,-8(sp)
	sub	d7,d7,d0

	lwz	d1,-8(sp)
	subi	d7,d7,3+1

	lwz	d2,-4(sp)
	sub.	d7,d7,d0
	bge+	no_collect_4579

	mflr	r0
	bl	collect_0

no_collect_4579:
	addi	a6,a6,4

	rlwinm	d3,a6,32-2,31,31
	lea	o0,__ARRAY__+2

	rlwinm	a6,a6,0,0,31-3
	add	d7,d7,d3

	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)

	cmpwi	0,d0,0

	stw	d0,8(a6)
	stwu	real_reg,12(a6)
	beq	skip_fillr_array
	
	mtctr	d0
fillr_array:
	stw	d1,4(a6)
	stwu	d2,8(a6)
	bdnz	fillr_array

skip_fillr_array:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.create_array:

create_array:
	subi	d7,d7,3
	sub.	d7,d7,d0
	bge+	no_collect_4576

	mflr	r0
	bl	collect_1

no_collect_4576:
	mr	d1,a0
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	li	g0,0
	stwu	g0,12(a6)
	lwz	r0,0(sp)
	addi	sp,sp,4
	b	fillr1_array

create_R_array:
	subic.	d2,d2,2
	blt	create_R_array_1
	beq	create_R_array_2
	subic.	d2,d2,2
	blt	create_R_array_3	
	beq	create_R_array_4
	b	create_R_array_5

create_R_array_1:
	subi	d7,d7,3
	sub.	d7,d7,d0
	bge+	no_collect_4581

	mflr	r0
	bl	collect_0

no_collect_4581:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)
	cmpwi	0,d3,0

	lwz	r0,0(sp)
	addi	sp,sp,4
	beq	r_array_1_b

	lwz	d1,-4(a4)
	b	fillr1_array

r_array_1_b:
	lwz	d1,0(sp)

fillr1_array:
	andi.	o0,d0,1
	beq	st_fillr1_array_1

	stwu	d1,4(a6)
st_fillr1_array_1:
	srwi.	d0,d0,1
	beq	skip_fillr1_array_lp

	mtctr	d0
fillr1_array_lp:
	stw	d1,4(a6)
	stwu	d1,8(a6)
	bdnz	fillr1_array_lp

skip_fillr1_array_lp:
	blr

create_R_array_2:
	subi	d7,d7,3
	sub	d7,d7,d0
	sub.	d7,d7,d0
	bge+	no_collect_4582

	mflr	r0
	bl	collect_0

no_collect_4582:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4

	subic.	d3,d3,1
	blt	r_array_2_bb
	beq	r_array_2_ab
r_array_2_aa:
	lwz	d1,-4(a4)
	lwz	d2,-8(a4)
	b	st_fillr2_array
r_array_2_ab:
	lwz	d1,-4(a4)
	lwz	d2,0(sp)
	b	st_fillr2_array
r_array_2_bb:
	lwz	d1,0(sp)
	lwz	d2,4(sp)
	b	st_fillr2_array

st_fillr2_array:
	cmpwi	0,d0,0
	beq	skip_fillr2_array_1

	mtctr	d0
fillr2_array_1:
	stw	d1,4(a6)
	stwu	d2,8(a6)
	bdnz	fillr2_array_1

skip_fillr2_array_1:
	blr

create_R_array_3:
	subi	d7,d7,3
	sub	d7,d7,d0
	sub	d7,d7,d0
	sub.	d7,d7,d0
	bge+	no_collect_4583

	mflr	r0
	bl	collect_0

no_collect_4583:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)

	cmpwi	0,d3,0

	lwz	r0,0(sp)
	addi	a2,sp,4
	addi	sp,sp,4

	beq	r_array_3

	slwi	d4,d3,2
	sub	a3,a4,d4
	subi	d3,d3,1

copy_a_to_b_lp3:
	subic.	d3,d3,1

	lwz	o0,0(a3)
	addi	a3,a3,4
	stwu	o0,-4(sp)
	bge	copy_a_to_b_lp3

r_array_3:
	lwz	d1,0(sp)
	cmpwi	0,d0,0

	lwz	d2,4(sp)
	lwz	d3,8(sp)
	mr	sp,a2

	beq	skip_fillr3_array

	mtctr	d0
fillr3_array_1:
	stw	d1,4(a6)
	stw	d2,8(a6)
	stwu	d3,12(a6)
	bdnz	fillr3_array_1

skip_fillr3_array:
	blr

create_R_array_4:
	subi	d7,d7,3
	slwi	d2,d0,2
	sub.	d7,d7,d2
	bge+	no_collect_4584

	mflr	r0
	bl	collect_0

no_collect_4584:
	lea	o1,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o1,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)

	cmpwi	0,d3,0

	lwz	r0,0(sp)
	addi	a2,sp,4
	addi	sp,sp,4

	beq	r_array_4

	slwi	d4,d3,2
	sub	a3,a4,d4
	subi	d3,d3,1

copy_a_to_b_lp4:
	subic.	d3,d3,1
	lwz	o1,0(a3)
	addi	a3,a3,4
	stwu	o1,-4(sp)
	bge	copy_a_to_b_lp4

r_array_4:
	lwz	d1,0(sp)
	lwz	d2,4(sp)
	cmpwi	0,d0,0

	lwz	d3,8(sp)
	lwz	d4,12(sp)
	mr	sp,a2
	beq	skip_fillr4_array

	mtctr	d0
fillr4_array:
	stw	d1,4(a6)
	stw	d2,8(a6)
	stw	d3,12(a6)
	stwu	d4,16(a6)
	bdnz	fillr4_array

skip_fillr4_array:
	blr

create_R_array_5:
	subi	d7,d7,3
	slwi	d4,d0,2
	sub	d7,d7,d4
	mr	d5,d2
sub_size_lp:
	subic.	d5,d5,1
	sub	d7,d7,d0
	bgt	sub_size_lp

	tst	d7
	bge+	no_collect_4585

	mflr	r0
	bl	collect_0

no_collect_4585:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)

	cmpwi	0,d3,0

	lwz	r0,0(sp)
	addi	a2,sp,4
	addi	sp,sp,4
	mr	d5,d2

	beq	r_array_5

	slwi	d4,d3,2
	sub	a3,a4,d4
	subi	d3,d3,1

copy_a_to_b_lp5:
	subic.	d3,d3,1

	lwz	o0,0(a3)
	addi	a3,a3,4
	stwu	o0,-4(sp)
	bge	copy_a_to_b_lp5

r_array_5:
	lwz	d1,0(sp)
	lwz	d2,4(sp)
	lwz	d3,8(sp)
	lwz	d4,12(sp)
	b	st_fillr5_array

fillr5_array_1:
	stw	d1,4(a6)
	stw	d2,8(a6)
	mtctr	d5
	stw	d3,12(a6)
	addi	a3,sp,16
	stwu	d4,16(a6)

copy_elem_lp5:
	lwz	o0,0(a3)
	addi	a3,a3,4
	stwu	o0,4(a6)
	bdnz	copy_elem_lp5

st_fillr5_array:
	subic.	d0,d0,1
	bge	fillr5_array_1

	mr	sp,a2
	blr

	.text
# __TEXT.e__system__sAP:

e__system__sAP:
	lwz	a2,0(a1)
	lwz	a2,4-2(a2)
	mtctr	a2	
	bctr

# comment	_ARRAYS

	.text
# __TEXT._create_arrayB:

_create_arrayB:
	mr	d1,d0
	addi	d0,d0,3
	srwi	d0,d0,2
	subi	d7,d7,3
	sub.	d7,d7,d0
	bge+	no_collect_3575

	mflr	r0
	bl	collect_0

no_collect_3575:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d1,8(a6)
	stwu	bool_reg,12(a6)
	slwi	d0,d0,2
	add	a6,a6,d0
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT._create_arrayC:

_create_arrayC:
	mr	d1,d0
	addi	d0,d0,3
	srwi	d0,d0,2
	subi	d7,d7,2
	sub.	d7,d7,d0
	bge+	no_collect_3578

	mflr	r0
	bl	collect_0

no_collect_3578:
	lea	o0,__STRING__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stwu	d1,8(a6)
	slwi	d0,d0,2
	add	a6,a6,d0
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT._create_arrayI:

_create_arrayI:
	subi	d7,d7,3
	sub.	d7,d7,d0
	bge+	no_collect_3577

	mflr	r0
	bl	collect_0

no_collect_3577:
	lea	o0,__ARRAY__+2
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	int_reg,12(a6)
	slwi	d0,d0,2
	add	a6,a6,d0
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT._create_arrayR:

_create_arrayR:
	sub	d7,d7,d0
	subi	d7,d7,3+1
	sub.	d7,d7,d0
	bge+	no_collect_3579

	mflr	r0
	bl	collect_0

no_collect_3579:
	addi	a6,a6,4

	lea	o0,__ARRAY__+2
	rlwinm	d3,a6,32-2,31,31

	rlwinm	a6,a6,0,0,31-3
	add	d7,d7,d3

	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	slwi	d0,d0,3
	stwu	real_reg,12(a6)
	add	a6,a6,d0
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

# comment d0: number of elements, d1: element descriptor, d2: element size,
# comment d3: element a size a0: a_element -> a0: array

	.text
# __TEXT._create_r_array:

_create_r_array:
	subi	d7,d7,3
	mr	d5,d2
sub_size_lp2:
	subic.	d5,d5,1
	sub	d7,d7,d0
	bgt	sub_size_lp2

	tst	d7
	bge+	no_collect_3585

	mflr	r0
	bl	collect_1

no_collect_3585:
	lea	o0,__ARRAY__+2
	mr	d4,a0
	addi	a0,a6,4+NODE_POINTER_OFFSET
	stw	o0,4(a6)
	stw	d0,8(a6)
	stwu	d1,12(a6)

	tst	d3
	lwz	r0,0(sp)
	addi	sp,sp,4
	beq	_create_r_array_0
	subic.	d3,d3,2
	blt	_create_r_array_1
	beq	_create_r_array_2
	subic.	d3,d3,2
	blt	_create_r_array_3	
	beq	_create_r_array_4
	b	_create_r_array_5

_create_r_array_0:
	tst	d2
	mtctr	d2
	slwi	d0,d0,2
	beq	_skip_fillr0_array_lp
_fillr0_array_1:
	add	a6,a6,d0
	bdnz	_fillr0_array_1
_skip_fillr0_array_lp:
	blr

_create_r_array_1:
	tst	d0
	mtctr	d0
	slwi	d2,d2,2
	beq	_skip_fillr1_array_lp
_fillr1_array_lp:
	stw	d4,4(a6)
	add	a6,a6,d2
	bdnz	_fillr1_array_lp
_skip_fillr1_array_lp:
	blr

_create_r_array_2:
	tst	d0
	mtctr	d0
	slwi	d2,d2,2
	beq	_skip_fillr2_array_1
_fillr2_array_1:
	stw	d4,4(a6)
	stw	d4,8(a6)
	add	a6,a6,d2
	bdnz	_fillr2_array_1
_skip_fillr2_array_1:
	blr

_create_r_array_3:
	tst	d0
	mtctr	d0
	slwi	d2,d2,2
	beq	_skip_fillr3_array
_fillr3_array_1:
	stw	d4,4(a6)
	stw	d4,8(a6)
	stw	d4,12(a6)
	add	a6,a6,d2
	bdnz	_fillr3_array_1
_skip_fillr3_array:
	blr

_create_r_array_4:
	tst	d0
	mtctr	d0
	slwi	d2,d2,2
	beq	_skip_fillr4_array
_fillr4_array:
	stw	d4,4(a6)
	stw	d4,8(a6)
	stw	d4,12(a6)
	stw	d4,16(a6)
	add	a6,a6,d2
	bdnz	_fillr4_array
_skip_fillr4_array:
	blr

_create_r_array_5:
	mr	d1,d3
	subi	d2,d2,4
	sub	d2,d2,d3
	slwi	d2,d2,2
	b	_st_fillr5_array

_fillr5_array_1:
	stw	d4,4(a6)
	stw	d4,8(a6)
	mtctr	d1
	stw	d4,12(a6)
	stwu	d4,16(a6)

_copy_elem_lp5:
	stwu	d4,4(a6)
	bdnz	_copy_elem_lp5
	add	a6,a6,d2
_st_fillr5_array:
	subic.	d0,d0,1
	bge	_fillr5_array_1
	blr

	.text
# __TEXT.yet_args_needed:

yet_args_needed:
# comment for more than 4 arguments
	lwz	d1,0(a1)
	lhz	d0,-2(d1)
	subi	d7,d7,3
	sub.	d7,d7,d0
	blt	gc_1

gc_r_1:	lwz	d3,4(a1)
	subi	d0,d0,1+4
	lwz	a1,8(a1)
	addi	d2,a6,4
	lwz	o0,0(a1)
	lwz	o1,4(a1)
	stw	o0,4(a6)
	lwz	o2,8(a1)
	stw	o1,8(a6)
	addi	a1,a1,12
	stwu	o2,12(a6)

cp_a:	lwz	o0,0(a1)
	addi	a1,a1,4
	stwu	o0,4(a6)
	subic.	d0,d0,1
	bge	cp_a

	stw	a0,4(a6)
	addi	d1,d1,8
	stw	d1,8(a6)
	addi	a0,a6,8
	stw	d3,12(a6)
	stwu	d2,16(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_1:	mflr	r0
	bl	collect_2
	b	gc_r_1

	.text
# __TEXT.yet_args_needed_0:

yet_args_needed_0:
	subic.	d7,d7,2
	blt	gc_20
gc_r_20:	stwu	a0,8(a6)
	lwz	d0,0(a1)
	addi	a0,a6,4-8
	addi	d0,d0,8
	stw	d0,4-8(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_20:	mflr	r0
	bl	collect_2
	b	gc_r_20

	.text
# __TEXT.yet_args_needed_1:

yet_args_needed_1:
	subic.	d7,d7,3
	blt	gc_21
gc_r_21:	stwu	a0,12(a6)
	lwz	d0,0(a1)
	addi	a0,a6,4-12
	addi	d0,d0,8
	stw	d0,4-12(a6)
	lwz	d1,4(a1)
	stw	d1,8-12(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_21:	mflr	r0
	bl	collect_2
	b	gc_r_21

	.text
# __TEXT.yet_args_needed_2:

yet_args_needed_2:
	subic.	d7,d7,5
	blt	gc_22
gc_r_22:
	lwz	d0,0(a1)
	stw	a0,8(a6)
	addi	d0,d0,8
	lwz	d2,4(a1)
	stw	d0,12(a6)
	addi	a0,a6,12
	lwz	o0,8(a1)
	stw	d2,16(a6)
	stwu	o0,4(a6)
	stwu	a6,16(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
		
gc_22:	mflr	r0
	bl	collect_2
	b	gc_r_22

	.text
# __TEXT.yet_args_needed_3:

yet_args_needed_3:
	subic.	d7,d7,6
	blt	gc_23
gc_r_23:
	lwz	d0,0(a1)
	stw	a0,12(a6)
	addi	d0,d0,8
	lwz	d2,4(a1)
	stw	d0,16(a6)
	lwz	a1,8(a1)
	stw	d2,20(a6)
	lwz	o0,0(a1)
	lwz	o1,4(a1)
	stwu	o0,4(a6)
	stwu	a6,20(a6)
	addi	a0,a6,16-24
	stw	o1,8-24(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_23:	mflr	r0
	bl	collect_2
	b	gc_r_23

	.text
# __TEXT.yet_args_needed_4:

yet_args_needed_4:
	subic.	d7,d7,7
	blt	gc_24
gc_r_24:
	lwz	d0,0(a1)
	stw	a0,16(a6)
	addi	d0,d0,8
	lwz	d2,4(a1)
	stw	d0,20(a6)
	lwz	a1,8(a1)
	stw	d2,24(a6)
	lwz	o0,0(a1)
	lwz	o1,4(a1)
	stwu	o0,4(a6)
	stwu	a6,24(a6)
	addi	a0,a6,20-28
	lwz	o2,8(a1)
	stw	o1,8-28(a6)
	stw	o2,12-28(a6)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

gc_24:	mflr	r0
	bl	collect_2
	b	gc_r_24

	.text
# __TEXT.repl_args_b:

repl_args_b:
	cmpwi	0,d0,0
	ble	repl_args_b_1

	subic.	d0,d0,1
	beq	repl_args_b_4

	lwz	a1,8(a0)
	subic.	d1,d1,2
	bne	repl_args_b_2

	stw	a1,0(a4)
	addi	a4,a4,4
	b	repl_args_b_4

repl_args_b_2:
	slwi	d1,d0,2
	add	a1,a1,d1
	subi	d0,d0,1
repl_args_b_3:
	lwzu	o0,-4(a1)
	addi	a4,a4,4
	stw	o0,0-4(a4)
	cmpwi	0,d0,0
	subi	d0,d0,1
	bne	repl_args_b_3
repl_args_b_4:
	lwz	o0,4(a0)
	addi	a4,a4,4
	stw	o0,0-4(a4)
repl_args_b_1:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.push_arg_b:

push_arg_b:
	cmplwi	0,d1,2
	blt	push_arg_b_1
	bne	push_arg_b_2

	cmpw	0,d1,d0
	beq	push_arg_b_1
push_arg_b_2:
	lwz	a0,8(a0)
	subi	d1,d1,2
push_arg_b_1:
	slwi	d1,d1,2
	lwzx	a0,a0,d1

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
# __TEXT.del_args:

del_args:
	lwz	d1,0(a0)
	sub	d1,d1,d0
	lhz	d0,-2(d1)
	subic.	d0,d0,2
	bge	del_args_2

	lwz	o0,4(a0)
	stw	d1,0(a1)
	lwz	o1,8(a0)
	stw	o0,4(a1)
	stw	o1,8(a1)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

del_args_2:
	bne	del_args_3

	lwz	o0,4(a0)
	stw	d1,0(a1)
	lwz	o1,8(a0)
	stw	o0,4(a1)
	lwz	o1,0(o1)
	stw	o1,8(a1)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

del_args_3:
	sub.	d7,d7,d0
	blt	del_args_gc
del_args_r_gc:
	stw	d1,0(a1)
	lwz	o0,4(a0)
	stw	a6,8(a1)
	lwz	a0,8(a0)
	stw	o0,4(a1)

del_args_copy_args:
	lwz	o0,0(a0)
	addi	a0,a0,4
	stw	o0,0(a6)
	addi	a6,a6,4
	subic.	d0,d0,1
	bgt	del_args_copy_args

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

del_args_gc:
	mflr	r0
	bl	collect_2	
	b	del_args_r_gc

 .if 0
	.text
o__S_P2:
	lwz	d0,0(a0)
	lha	d0,-2(d0)
	cmpwi	0,d0,2
	lwz	a0,8(a0)
	beq	o__S_P2_2
	lwz	a0,0(a0)
o__S_P2_2:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	

	.text
ea__S_P2:
	lea	a2,__indirection
	lwz	d0,4(a1)
	stw	a2,0(a1)
	stw	a0,4(a1)
	mr	a1,d0
	lwz	d0,0(a1)
	andi.	r0,d0,2
	bne	ea__S_P2_1
		
	stw	a0,0(a4)
	addi	a4,a4,4

	mtctr	d0

	mr	a0,a1

	mflr	r0
	stwu	r0,-4(sp)
	bctrl
	mtlr	r0

	mr	a1,a0
	lwzu	a0,-4(a4)

ea__S_P2_1:
	lwz	d0,0(a1)
	lha	d0,-2(d0)
	lwz	a1,8(a1)
	cmpwi	0,d0,2
	beq	ea__S_P2_2
	lwz	a1,0(a1)
ea__S_P2_2:
	lwz	d0,0(a1)
	andi.	r0,d0,2
	bne	ea__S_P2_3

	subi	d0,d0,20
	mtctr	d0
	bctr

ea__S_P2_3:
	stw	d0,0(a0)
	lwz	g1,4(a1)
	stw	g1,4(a0)
	lwz	g1,8(a1)
	stw	g1,8(a0)

	lwz	r0,0(sp)
	addi	sp,sp,4
	blr	
 .endif

	.text
# __TEXT.acos_real:

acos_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_acos$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.asin_real:

asin_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_asin$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.atan_real:

atan_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_atan$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.cos_real:

cos_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_cos$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.sin_real:

sin_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_sin$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.tan_real:

tan_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_tan$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.ln_real:

ln_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_log$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.log10_real:

log10_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_log10$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
# __TEXT.exp_real:

exp_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_exp$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text

# __TEXT.sqrt_real:
	
sqrt_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f1,f14

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_sqrt$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text
	
# __TEXT.pow_real:

pow_real:
	mflr	r0
	stwu	r0,-4(sp)
	fmr	f2,f14
	fmr	f1,f15

 .if MACOSX
 	mr	g0,sp
 	ori	sp,sp,28
 	stwu	g0,-(64+28)(sp)
 .else
	stwu	sp,-64(sp)
 .endif
	bl	L_pow$stub
 .if USE_DCBZ
	li	g2,32
 .endif
 .if MACOSX
 	lwz	sp,0(sp)
 	lwz	r0,0(sp)
 .else
	lwz	r0,64(sp)
 .endif
	fmr	f14,f1
	mtlr	r0
 .if MACOSX
	lwz	r0,4(sp)
	addi	sp,sp,8
 .else
	lwz	r0,68(sp)
	addi	sp,sp,72
 .endif
	blr

	.text

# __TEXT.entier_real:

entier_real:
	lea	o0,entier_constants_and_buffers
	fctiwz	f2,f14
	lfd	f1,0(o0)
	stfd	f2,8(o0)
	fcmpo	0,f14,f1
	lwz	d0,12(o0)
	bge+	entier_real_2

	lfd	f31,24(o0)
	xoris	o1,d0,0x8000
	stw	o1,20(o0)
	lfd	f1,16(o0)
	fsub	f1,f1,f31
	fcmpo	0,f14,f1
	beq	entier_real_2

	subi	d0,d0,1
entier_real_2:
	lwz	r0,0(sp)
	addi	sp,sp,4
	blr

.picsymbol_stub
L_sin$stub:
	.indirect_symbol _sin
	mflr r0
	bcl 20,31,L0$pb
L0$pb:
	mflr r11
	addis r11,r11,ha16(L0$lz-L0$pb)
	mtlr r0
	lwz r12,lo16(L0$lz-L0$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L0$lz-L0$pb )
	bctr
.lazy_symbol_pointer
L0$lz:
	.indirect_symbol _sin
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_cos$stub:
	.indirect_symbol _cos
	mflr r0
	bcl 20,31,L1$pb
L1$pb:
	mflr r11
	addis r11,r11,ha16(L1$lz-L1$pb)
	mtlr r0
	lwz r12,lo16(L1$lz-L1$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L1$lz-L1$pb )
	bctr
.lazy_symbol_pointer
L1$lz:
	.indirect_symbol _cos
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_tan$stub:
	.indirect_symbol _tan
	mflr r0
	bcl 20,31,L2$pb
L2$pb:
	mflr r11
	addis r11,r11,ha16(L2$lz-L2$pb)
	mtlr r0
	lwz r12,lo16(L2$lz-L2$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L2$lz-L2$pb )
	bctr
.lazy_symbol_pointer
L2$lz:
	.indirect_symbol _tan
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_asin$stub:
	.indirect_symbol _asin
	mflr r0
	bcl 20,31,L3$pb
L3$pb:
	mflr r11
	addis r11,r11,ha16(L3$lz-L3$pb)
	mtlr r0
	lwz r12,lo16(L3$lz-L3$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L3$lz-L3$pb )
	bctr
.lazy_symbol_pointer
L3$lz:
	.indirect_symbol _asin
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_acos$stub:
	.indirect_symbol _acos
	mflr r0
	bcl 20,31,L4$pb
L4$pb:
	mflr r11
	addis r11,r11,ha16(L4$lz-L4$pb)
	mtlr r0
	lwz r12,lo16(L4$lz-L4$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L4$lz-L4$pb )
	bctr
.lazy_symbol_pointer
L4$lz:
	.indirect_symbol _acos
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_atan$stub:
	.indirect_symbol _atan
	mflr r0
	bcl 20,31,L5$pb
L5$pb:
	mflr r11
	addis r11,r11,ha16(L5$lz-L5$pb)
	mtlr r0
	lwz r12,lo16(L5$lz-L5$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L5$lz-L5$pb )
	bctr
.lazy_symbol_pointer
L5$lz:
	.indirect_symbol _atan
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_sqrt$stub:
	.indirect_symbol _sqrt
	mflr r0
	bcl 20,31,L6$pb
L6$pb:
	mflr r11
	addis r11,r11,ha16(L6$lz-L6$pb)
	mtlr r0
	lwz r12,lo16(L6$lz-L6$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L6$lz-L6$pb )
	bctr
.lazy_symbol_pointer
L6$lz:
	.indirect_symbol _sqrt
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_pow$stub:
	.indirect_symbol _pow
	mflr r0
	bcl 20,31,L7$pb
L7$pb:
	mflr r11
	addis r11,r11,ha16(L7$lz-L7$pb)
	mtlr r0
	lwz r12,lo16(L7$lz-L7$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L7$lz-L7$pb )
	bctr
.lazy_symbol_pointer
L7$lz:
	.indirect_symbol _pow
       	.long dyld_stub_binding_helper

.picsymbol_stub
L_exp$stub:
	.indirect_symbol _exp
	mflr r0
	bcl 20,31,L8$pb
L8$pb:
	mflr r11
	addis r11,r11,ha16(L8$lz-L8$pb)
	mtlr r0
	lwz r12,lo16(L8$lz-L8$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L8$lz-L8$pb )
	bctr
.lazy_symbol_pointer
L8$lz:
	.indirect_symbol _exp
	.long dyld_stub_binding_helper

.picsymbol_stub
L_log$stub:
	.indirect_symbol _log
	mflr r0
	bcl 20,31,L9$pb
L9$pb:
	mflr r11
	addis r11,r11,ha16(L9$lz-L9$pb)
	mtlr r0
	lwz r12,lo16(L9$lz-L9$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L9$lz-L9$pb )
	bctr
.lazy_symbol_pointer
L9$lz:
	.indirect_symbol _log
	.long dyld_stub_binding_helper

.picsymbol_stub
L_log10$stub:
	.indirect_symbol _log10
	mflr r0
	bcl 20,31,L10$pb
L10$pb:
	mflr r11
	addis r11,r11,ha16(L10$lz-L10$pb)
	mtlr r0
	lwz r12,lo16(L10$lz-L10$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L10$lz-L10$pb )
	bctr
.lazy_symbol_pointer
L10$lz:
	.indirect_symbol _log10
	.long dyld_stub_binding_helper

.picsymbol_stub
L_sprintf$stub:
	.indirect_symbol _sprintf
	mflr r0
	bcl 20,31,L11$pb
L11$pb:
	mflr r11
	addis r11,r11,ha16(L11$lz-L11$pb)
	mtlr r0
	lwz r12,lo16(L11$lz-L11$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L11$lz-L11$pb )
	bctr
.lazy_symbol_pointer
L11$lz:
	.indirect_symbol _sprintf
	.long dyld_stub_binding_helper


.picsymbol_stub
L_TickCount$stub:
	.indirect_symbol _TickCount
	mflr r0
	bcl 20,31,L12$pb
L12$pb:
	mflr r11
	addis r11,r11,ha16(L12$lz-L12$pb)
	mtlr r0
	lwz r12,lo16(L12$lz-L12$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L12$lz-L12$pb )
	bctr
.lazy_symbol_pointer
L12$lz:
	.indirect_symbol _TickCount
	.long dyld_stub_binding_helper

.picsymbol_stub
L_DisposePtr$stub:
	.indirect_symbol _DisposePtr
	mflr r0
	bcl 20,31,L13$pb
L13$pb:
	mflr r11
	addis r11,r11,ha16(L13$lz-L13$pb)
	mtlr r0
	lwz r12,lo16(L13$lz-L13$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L13$lz-L13$pb )
	bctr
.lazy_symbol_pointer
L13$lz:
	.indirect_symbol _DisposePtr
	.long dyld_stub_binding_helper

.picsymbol_stub
L_NewPtr$stub:
	.indirect_symbol _NewPtr
	mflr r0
	bcl 20,31,L14$pb
L14$pb:
	mflr r11
	addis r11,r11,ha16(L14$lz-L14$pb)
	mtlr r0
	lwz r12,lo16(L14$lz-L14$pb)(r11)
	mtctr r12
	addi r11,r11,lo16(L14$lz-L14$pb )
	bctr
.lazy_symbol_pointer
L14$lz:
	.indirect_symbol _NewPtr
	.long dyld_stub_binding_helper