Major file restructuring.
[cacao.git] / src / vm / jit / powerpc / asmpart.S
1 #include "offsets.h"
2
3 .text
4         .align 2
5
6         .globl _builtin_throw_exception
7         .globl _jit_compile
8         .globl _builtin_canstore
9         .globl _builtin_trace_exception
10         .globl _builtin_monitorenter
11         .globl _builtin_monitorexit
12         .globl _builtin_ldiv
13         .globl _builtin_lrem
14         .globl _builtin_checkarraycast
15         .globl _proto_java_lang_NullPointerException
16         .globl _proto_java_lang_ArrayIndexOutOfBoundsException
17         .globl _proto_java_lang_ArrayStoreException
18         .globl _proto_java_lang_ArithmeticException
19         .globl _proto_java_lang_ClassCastException
20
21         .globl _catch_Handler
22
23 #define     MethodPointer   -8
24 #define     FrameSize       -12
25 #define     IsSync          -16
26 #define     IsLeaf          -20
27 #define     IntSave         -24
28 #define     FltSave         -28
29 #define     ExTableSize     -32
30 #define     ExTableStart    -32
31
32 #define     ExEntrySize     -16
33 #define     ExStartPC       -4
34 #define     ExEndPC         -8
35 #define     ExHandlerPC     -12
36 #define     ExCatchType     -16
37
38 #define itmp1 r11
39 #define itmp2 r12
40 #define itmp3 r0
41
42 #define xptr itmp1
43 #define xpc itmp2
44
45 #define pv r13
46 #define mptr r12
47 #define mptrn 12
48
49         .align 2
50 builtinthrow:
51         .long _builtin_throw_exception
52
53         .align 2
54     .long   0                         /* catch type all                       */
55     .long   calljava_xhandler         /* handler pc                           */
56     .long   calljava_xhandler         /* end pc                               */
57     .long   _asm_calljavamethod       /* start pc                             */
58     .long   1                         /* extable size                         */
59     .long   0                         /* fltsave                              */
60     .long   0                         /* intsave                              */
61     .long   0                         /* isleaf                               */
62     .long   0                         /* IsSync                               */
63     .long   24                        /* frame size                           */
64     .long   0                         /* method pointer (pointer to name)     */
65         .long   0                         /* padding                              */
66
67
68 .globl _asm_docalljavamethod
69 _asm_docalljavamethod:
70         mflr r0
71         stw r31,-4(r1)
72 //      stw r30,-8(r1)
73         stw pv,-12(r1)
74         stw r0,8(r1)
75         stwu r1,-148(r1)
76         bl 0f
77 0:
78         mflr r31
79
80         stw r16,40(r1)
81         stw r17,44(r1)
82         stw r18,48(r1)
83         stw r19,52(r1)
84         stw r20,56(r1)
85         stw r21,60(r1)
86         stw r22,64(r1)
87         stw r23,68(r1)
88         stfd f16,72(r1)
89         stfd f17,80(r1)
90         stfd f18,88(r1)
91         stfd f19,96(r1)
92         stfd f20,104(r1)
93         stfd f21,112(r1)
94         stfd f22,120(r1)
95         stfd f23,128(r1)
96
97         stw r3,36(r1)
98         addi r2,r1,36
99         mr r3,r4
100         mr r4,r5
101         mr r5,r6
102         mr r6,r7
103
104 //      addis mptr,r31,ha16(_asm_call_jit_compiler-0b)
105         addi mptr,r31,lo16(_asm_call_jit_compiler-0b)
106         stw mptr,32(r1)
107         addi mptr,r1,28
108
109         lwz pv,4(mptr)
110         mtctr pv
111         bctrl
112 1:
113         mflr itmp1
114         addi pv,itmp1,lo16(_asm_docalljavamethod-1b)
115         
116 calljava_regrestore:
117         lwz r16,40(r1)
118         lwz r17,44(r1)
119         lwz r18,48(r1)
120         lwz r19,52(r1)
121         lwz r20,56(r1)
122         lwz r21,60(r1)
123         lwz r22,64(r1)
124         lwz r23,68(r1)
125         lfd f16,72(r1)
126         lfd f17,80(r1)
127         lfd f18,88(r1)
128         lfd f19,96(r1)
129         lfd f20,104(r1)
130         lfd f21,112(r1)
131         lfd f22,120(r1)
132         lfd f23,128(r1)
133
134         lwz r0,148+8(r1)
135         mtlr r0
136         addi r1,r1,148
137         lwz pv,-12(r1)
138 //      lwz r30,-8(r1)
139         lwz r31,-4(r1)
140         blr
141 calljava_xhandler:
142         mr r3,itmp1
143 //      addis pv,r31,ha16(builtinthrow-0b)
144         lwz itmp1,lo16(builtinthrow-0b)(r31)
145         mtctr itmp1
146         bctrl
147         b calljava_regrestore
148
149
150
151
152 jitcompile:
153         .long _jit_compile
154
155 .globl _asm_call_jit_compiler
156 _asm_call_jit_compiler:
157 0:
158         mflr itmp1
159         stw r31,-4(r1)
160 //      stw pv,-8(r1)
161         stw r29,-12(r1)
162         stw itmp1,8(r1)
163         stwu r1,-176(r1)
164         mr r31,pv
165
166         lwz itmp3,-12(itmp1)
167         srwi itmp3,itmp3,16
168         andi. itmp3,itmp3,31
169         cmpwi itmp3,mptrn
170         beq noregchange
171         lwz itmp3,4(itmp1)
172         extsh itmp3,itmp3
173         add mptr,itmp3,itmp1
174         lwz itmp3,8(itmp1)
175         srwi itmp3,itmp3,16
176         cmpwi itmp3,0x3dad
177         bne noregchange
178         lwz itmp3,8(itmp1)
179         slwi itmp3,itmp3,16
180         add mptr,mptr,itmp3
181 noregchange:
182         mr r29,mptr
183         stw r3,28(r1)
184         stw r4,32(r1)
185         stw r5,36(r1)
186         stw r6,40(r1)
187         stw r7,44(r1)
188         stw r8,48(r1)
189         stw r9,52(r1)
190         stfd f1,56(r1)
191         stfd f2,64(r1)
192         stfd f3,72(r1)
193         stfd f4,80(r1)
194         stfd f5,88(r1)
195         stfd f6,96(r1)
196         stfd f7,104(r1)
197         stfd f8,112(r1)
198         stfd f9,120(r1)
199         stfd f10,128(r1)
200         stfd f11,136(r1)
201         stfd f12,144(r1)
202         stfd f13,152(r1)
203         stw r10,160(r1)
204
205         lwz r3,0(r2)
206 //      addis pv,r31,ha16(jitcompile-0b)
207         lwz itmp1,lo16(jitcompile-0b)(r31)
208         mtctr itmp1
209         bctrl
210
211         mr pv,r3
212         mr mptr,r29
213         lwz r3,28(r1)
214         lwz r4,32(r1)
215         lwz r5,36(r1)
216         lwz r6,40(r1)
217         lwz r7,44(r1)
218         lwz r8,48(r1)
219         lwz r9,52(r1)
220         lfd f1,56(r1)
221         lfd f2,64(r1)
222         lfd f3,72(r1)
223         lfd f4,80(r1)
224         lfd f5,88(r1)
225         lfd f6,96(r1)
226         lfd f7,104(r1)
227         lfd f8,112(r1)
228         lfd f9,120(r1)
229         lfd f10,128(r1)
230         lfd f11,136(r1)
231         lfd f12,144(r1)
232         lfd f13,152(r1)
233         lwz r10,160(r1)
234
235         lwz itmp1,176+8(r1)
236         lwz itmp3,-12(itmp1)
237         extsh itmp3,itmp3
238         add mptr,mptr,itmp3
239         stw pv,0(mptr)
240
241         mtctr pv
242
243         lwz r0,176+8(r1)
244         mtlr r0
245         addi r1,r1,176
246         lwz r29,-12(r1)
247 //      lwz pv,-8(r1)
248         lwz r31,-4(r1)
249         bctr
250
251
252 builtin_traceexception:
253         .long _builtin_trace_exception
254 builtin_monitorenter:
255         .long _builtin_monitorenter
256 builtin_monitorexit:
257         .long _builtin_monitorexit
258 builtin_ldiv:
259         .long _builtin_ldiv
260 builtin_lrem:
261         .long _builtin_lrem
262
263 .globl _asm_handle_nat_exception
264 _asm_handle_nat_exception:
265         mflr r2
266         lwz itmp3,4(r2)
267         extsh itmp3,itmp3
268         add pv,itmp3,r2
269         lwz itmp3,8(r2)
270         srwi itmp3,itmp3,16
271         cmpwi itmp3,0x3dad
272         bne _asm_handle_exception
273         lwz itmp3,8(r2)
274         slwi itmp3,itmp3,16
275         add pv,pv,itmp3
276
277         .globl _asm_handle_exception
278 _asm_handle_exception:
279         addi r1,r1,-18*4
280         stw r0,0*4(r1)
281         stw r2,1*4(r1)
282         stw r3,2*4(r1)
283         stw r4,3*4(r1)
284         stw r5,4*4(r1)
285         stw r6,5*4(r1)
286         stw r7,6*4(r1)
287         stw r8,7*4(r1)
288         stw r9,8*4(r1)
289         stw r10,9*4(r1)
290         stw r16,10*4(r1)
291         stw r17,11*4(r1)
292         stw r18,12*4(r1)
293         stw r19,13*4(r1)
294         stw r20,14*4(r1)
295         stw r21,15*4(r1)
296         stw r22,16*4(r1)
297         stw r23,17*4(r1)
298
299         li r2,1
300 ex_stack_loop:
301         addi r1,r1,-4*4
302         stw xptr,0*4(r1)
303         stw xpc,1*4(r1)
304         mflr xptr
305         stw xptr,2*4(r1)
306         stw r2,3*4(r1)
307
308         lwz r3,0*4(r1)
309         lwz r4,MethodPointer(pv)
310         mr r5,xpc
311         mr r6,r2
312
313         bl 0f
314 0:
315         mflr itmp1
316         lwz itmp1,lo16(builtin_traceexception-0b)(itmp1)
317         mtctr itmp1
318         addi r1,r1,-40
319         bctrl
320         addi r1,r1,40
321
322         lwz xptr,2*4(r1)
323         mtlr xptr
324         lwz xptr,0*4(r1)
325         lwz xpc,1*4(r1)
326         lwz r2,3*4(r1)
327         addi r1,r1,4*4
328
329         lwz r3,ExTableSize(pv)
330         mr. r3,r3
331         beq empty_table
332         addi r4,pv,ExTableStart
333
334 ex_table_loop:
335         lwz r5,ExStartPC(r4)
336         cmplw r5,xpc
337         bgt ex_table_cont
338         lwz r5,ExEndPC(r4)
339         cmplw xpc,r5
340         bge ex_table_cont
341         lwz r7,ExCatchType(r4)
342         mr. r7,r7
343         beq ex_handle_it
344
345         lwz r6,offobjvftbl(xptr)
346         lwz r7,offobjvftbl(r7)
347         lwz r6,offbaseval(r6)
348         lwz r8,offbaseval(r7)
349         lwz r7,offdiffval(r7)
350         subf r6,r8,r6
351         cmplw r6,r7
352         bgt ex_table_cont
353
354 ex_handle_it:
355         lwz xpc,ExHandlerPC(r4)
356         mr. r2,r2
357         beq ex_jump
358
359         lwz r0,0*4(r1)
360         lwz r2,1*4(r1)
361         lwz r3,2*4(r1)
362         lwz r4,3*4(r1)
363         lwz r5,4*4(r1)
364         lwz r6,5*4(r1)
365         lwz r7,6*4(r1)
366         lwz r8,7*4(r1)
367         lwz r9,8*4(r1)
368         lwz r10,9*4(r1)
369         lwz r16,10*4(r1)
370         lwz r17,11*4(r1)
371         lwz r18,12*4(r1)
372         lwz r19,13*4(r1)
373         lwz r20,14*4(r1)
374         lwz r21,15*4(r1)
375         lwz r22,16*4(r1)
376         lwz r23,17*4(r1)
377         addi r1,r1,18*4
378
379 ex_jump:
380         mtctr xpc
381         bctr
382
383 ex_table_cont:
384         addi r4,r4,ExEntrySize
385         addic. r3,r3,-1
386         bgt ex_table_loop
387
388 empty_table:
389         mr. r2,r2
390         beq ex_already_cleared
391         addi r1,r1,18*4
392         li r2,0
393 ex_already_cleared:
394         lwz r3,IsSync(pv)
395         mr. r3,r3
396         beq no_monitor_exit
397         add r3,r1,r3
398         lwz r6,-4(r3)
399
400         addi r1,r1,-6*4
401         stw r3,0*4(r1)
402         stw r4,1*4(r1)
403         stw r2,2*4(r1)
404         stw xptr,3*4(r1)
405         stw xpc,4*4(r1)
406         mflr xptr
407         stw xptr,5*4(r1)
408
409         mr r3,r6
410         bl 0f
411 0:
412         mflr itmp1
413         lwz itmp1,lo16(builtin_monitorexit-0b)(itmp1)
414         mtctr itmp1
415         addi r1,r1,-40
416         bctrl
417         addi r1,r1,40
418
419         lwz xptr,5*4(r1)
420         mtlr xptr
421         lwz r3,0*4(r1)
422         lwz r4,1*4(r1)
423         lwz r2,2*4(r1)
424         lwz xptr,3*4(r1)
425         lwz xpc,4*4(r1)
426         addi r1,r1,6*4
427
428 no_monitor_exit:
429         lwz r3,FrameSize(pv)
430         add r1,r1,r3
431         mr r3,r1
432         lwz r4,IsLeaf(pv)
433         mr. r4,r4
434         bne ex_no_restore
435         lwz r4,8(r3)
436         mtlr r4
437 ex_no_restore:
438         mflr r4
439         mr xpc,r4
440         lwz r4,IntSave(pv)
441         bl ex_int1
442 ex_int1:
443         mflr r5
444         addi r5,r5,lo16(ex_int2-ex_int1)
445         slwi r4,r4,2
446         subf r5,r4,r5
447         mtctr r5
448         bctr
449         lwz r14,-40(r3)
450         lwz r15,-36(r3)
451         lwz r24,-32(r3)
452         lwz r25,-28(r3)
453         lwz r26,-24(r3)
454         lwz r27,-20(r3)
455         lwz r28,-16(r3)
456         lwz r29,-12(r3)
457         lwz r30,-8(r3)
458         lwz r31,-4(r3)
459 ex_int2:
460         subf r3,r4,r3
461
462         lwz r4,FltSave(pv)
463         bl ex_flt1
464 ex_flt1:
465         mflr r5
466         addi r5,r5,lo16(ex_flt2-ex_flt1)
467         slwi r4,r4,2
468         subf r5,r4,r5
469         mtctr r5
470         bctr
471         lfd f14,-80(r3)
472         lfd f15,-72(r3)
473         lfd f24,-64(r3)
474         lfd f25,-56(r3)
475         lfd f26,-48(r3)
476         lfd f27,-40(r3)
477         lfd f28,-32(r3)
478         lfd f29,-24(r3)
479         lfd f30,-16(r3)
480         lfd f31,-8(r3)
481 ex_flt2:
482         mtlr xpc
483         lwz itmp3,4(xpc)
484         extsh itmp3,itmp3
485         add pv,itmp3,xpc
486         lwz itmp3,8(xpc)
487         srwi itmp3,itmp3,16
488         cmpwi itmp3,0x3dad
489         bne ex_stack_loop
490         lwz itmp3,8(xpc)
491         slwi itmp3,itmp3,16
492         add pv,pv,itmp3
493         b ex_stack_loop
494
495
496
497
498
499
500
501 .globl _asm_builtin_checkarraycast
502 _asm_builtin_checkarraycast:
503 0:
504         mflr r0
505         stw r0,8(r1)
506         stwu r1,-48(r1)
507
508         stw r3,32(r1)
509         lwz itmp1,lo16(builtincheckarraycast-0b)(pv)
510         mtctr itmp1
511         bctrl
512
513         lwz r0,48+8(r1)
514         mtlr r0
515         mr. r3,r3
516         beq nb_carray_throw
517         lwz r3,32(r1)
518         addi r1,r1,48
519         blr
520
521 nb_carray_throw:
522         lwz xptr,lo16(proto_java_lang_ClassCastException-0b)(pv)
523         lwz xptr,0(xptr)
524         addi r1,r1,48
525         mflr xpc
526         b _asm_handle_nat_exception
527
528 .globl _asm_builtin_checkcast
529 _asm_builtin_checkcast:
530 0:
531         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
532         lwz xptr,0(xptr)
533         mflr xpc
534         b _asm_handle_nat_exception
535
536
537         
538         
539         
540         
541         
542 builtincanstore:
543         .long _builtin_canstore
544 builtincheckarraycast:
545         .long _builtin_checkarraycast
546         
547 .globl _asm_builtin_aastore
548 _asm_builtin_aastore:
549 0:
550         mr. r3,r3
551         beq nb_aastore_null
552         mflr r0
553         stw r0,8(r1)
554         stwu r1,-48(r1)
555
556         lwz itmp1,offarraysize(r3)
557         slwi itmp3,r4,2
558         add itmp2,r3,itmp3
559         cmplw r4,itmp1
560         bge nb_aastore_bound
561         mr r4,r5
562         stw itmp2,32(r1)
563         stw r4,36(r1)
564 //      addis pv,r31,ha16(builtincanstore-0b)
565         lwz itmp1,lo16(builtincanstore-0b)(pv)
566         mtctr itmp1
567         bctrl
568
569         lwz r0,48+8(r1)
570         mtlr r0
571         lwz itmp1,32(r1)
572         lwz itmp2,36(r1)
573         addi r1,r1,48
574         mr. r3,r3
575         beq nb_aastore_throw
576         stw itmp2,offobjarrdata(itmp1)
577         blr
578
579 proto_java_lang_NullPointerException:
580         .long _proto_java_lang_NullPointerException
581 proto_java_lang_ArrayIndexOutOfBoundsException:
582         .long _proto_java_lang_ArrayIndexOutOfBoundsException
583 proto_java_lang_ArrayStoreException:
584         .long _proto_java_lang_ArrayStoreException
585 proto_java_lang_ArithmeticException:
586         .long _proto_java_lang_ArithmeticException
587 proto_java_lang_ClassCastException:
588         .long _proto_java_lang_ClassCastException
589
590 nb_aastore_null:
591         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
592         lwz xptr,0(xptr)
593         mflr xpc
594         b _asm_handle_nat_exception
595 nb_aastore_bound:
596         lwz xptr,lo16(proto_java_lang_ArrayIndexOutOfBoundsException-0b)(pv)
597         lwz xptr,0(xptr)
598         addi r1,r1,48
599         mflr xpc
600         b _asm_handle_nat_exception
601 nb_aastore_throw:
602         lwz xptr,lo16(proto_java_lang_ArrayStoreException-0b)(pv)
603         lwz xptr,0(xptr)
604         mflr xpc
605         b _asm_handle_nat_exception
606
607
608
609 .globl _asm_dumpregistersandcall
610 _asm_dumpregistersandcall:
611         mflr r0
612         stw r0,8(r1)
613
614         stw r16,-72(r1)
615         stw r17,-68(r1)
616         stw r18,-64(r1)
617         stw r19,-60(r1)
618         stw r20,-56(r1)
619         stw r21,-52(r1)
620         stw r22,-48(r1)
621         stw r23,-44(r1)
622
623         stw r14,-40(r1)
624         stw r15,-36(r1)
625         stw r24,-32(r1)
626         stw r25,-28(r1)
627         stw r26,-24(r1)
628         stw r27,-20(r1)
629         stw r28,-16(r1)
630         stw r29,-12(r1)
631         stw r30,-8(r1)
632         stw r31,-4(r1)
633         addi r1,r1,-96
634
635         mtctr r3
636         bctrl
637
638         lwz r0,96+8(r1)
639         mtlr r0
640         addi r1,r1,96
641         blr
642
643         
644         
645 .globl _asm_builtin_monitorenter
646 _asm_builtin_monitorenter:
647 0:
648         lwz itmp2,lo16(builtin_monitorenter-0b)(pv)
649         mr. r3,r3
650         beq nb_monitorenter
651         mtctr itmp2
652         bctr
653 nb_monitorenter:
654         mflr r2
655         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
656         lwz xptr,0(xptr)
657         addi xpc,r2,-4
658         b _asm_handle_nat_exception
659
660 .globl _asm_builtin_monitorexit
661 _asm_builtin_monitorexit:
662 0:
663         lwz itmp2,lo16(builtin_monitorexit-0b)(pv)
664         mr. r3,r3
665         beq nb_monitorexit
666         mtctr itmp2
667         bctr
668 nb_monitorexit:
669         mflr r2
670         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
671         lwz xptr,0(xptr)
672         addi xpc,r2,-4
673         b _asm_handle_nat_exception
674         
675         
676         
677         
678         
679 .globl _synchronize_caches
680 _synchronize_caches:
681         blr
682 .globl _asm_getcallingmethod
683 _asm_getcallingmethod:
684         li r3,0
685         blr
686
687 .globl _asm_builtin_ldiv
688 _asm_builtin_ldiv:
689 0:
690         or. r0,r5,r6
691         beq nb_ldiv
692         lwz itmp1,lo16(builtin_ldiv-0b)(pv)
693         mtctr itmp1
694         bctr
695 nb_ldiv:
696         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
697         lwz xptr,0(xptr)
698         mflr xpc
699         b _asm_handle_nat_exception
700
701 .globl _asm_builtin_lrem
702 _asm_builtin_lrem:
703 0:
704         or. r0,r5,r6
705         beq nb_lrem
706         lwz itmp1,lo16(builtin_lrem-0b)(pv)
707         mtctr itmp1
708         bctr
709 nb_lrem:
710         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
711         lwz xptr,0(xptr)
712         mflr xpc
713         b _asm_handle_nat_exception
714
715 .globl _asm_builtin_idiv
716 _asm_builtin_idiv:
717 0:
718         mr. r4,r4
719         beq nb_idiv
720         divw r3,r3,r4
721         blr
722 nb_idiv:
723         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
724         lwz xptr,0(xptr)
725         mflr xpc
726         b _asm_handle_nat_exception
727
728 .globl _asm_builtin_irem
729 _asm_builtin_irem:
730 0:
731         mr. r4,r4
732         beq nb_irem
733         divw itmp3,r3,r4
734         mullw itmp3,itmp3,r4
735         subf r3,itmp3,r3
736         blr
737 nb_irem:
738         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
739         lwz xptr,0(xptr)
740         mflr xpc
741         b _asm_handle_nat_exception
742
743
744         
745         
746 .globl _has_no_x_instr_set
747 _has_no_x_instr_set:
748         li r3,0
749         blr
750
751
752         .globl _asm_cacheflush
753 _asm_cacheflush:
754         addi r4,r4,31
755         mr r5,r3
756         add r4,r3,r4
757 1:
758         cmplw r3,r4
759         bge 0f
760         dcbst 0,r3
761         addi r3,r3,32
762         b 1b
763 0:
764         sync
765 1:
766         cmplw r5,r4
767         bge 0f
768         icbi 0,r5
769         addi r5,r5,32
770         b 1b
771 0:
772         sync
773         isync
774         blr
775
776         .align 3
777 doublezero:
778         .double 0.0
779
780 .globl _asm_initialize_thread_stack
781 _asm_initialize_thread_stack:
782         addi r4,r4,-256
783         stw r3,120(r4)
784         li r3,0
785         stw r3,124(r4)
786         stw r3,0(r4)
787         stw r3,4(r4)
788         stw r3,8(r4)
789         stw r3,12(r4)
790         stw r3,16(r4)
791         stw r3,20(r4)
792         stw r3,24(r4)
793         stw r3,28(r4)
794         stw r3,32(r4)
795         stw r3,36(r4)
796
797         stw r3,128(r4)
798         stw r3,132(r4)
799         stw r3,136(r4)
800         stw r3,140(r4)
801         stw r3,144(r4)
802         stw r3,148(r4)
803         stw r3,152(r4)
804         stw r3,156(r4)
805
806         mflr r0
807         bl 0f
808 0:
809         mflr r3
810         mtlr r0
811         lfd f0,lo16(doublezero-0b)(r3)
812
813         stfd f0,40(r4)
814         stfd f0,48(r4)
815         stfd f0,56(r4)
816         stfd f0,64(r4)
817         stfd f0,72(r4)
818         stfd f0,80(r4)
819         stfd f0,88(r4)
820         stfd f0,96(r4)
821         stfd f0,104(r4)
822         stfd f0,112(r4)
823
824         stfd f0,160(r4)
825         stfd f0,168(r4)
826         stfd f0,176(r4)
827         stfd f0,184(r4)
828         stfd f0,192(r4)
829         stfd f0,200(r4)
830         stfd f0,208(r4)
831         stfd f0,216(r4)
832
833         mr r3,r4
834         blr
835
836 .globl _asm_perform_threadswitch
837 _asm_perform_threadswitch:
838         mflr r0
839         addi r1,r1,-224
840         stw r0,120(r1)
841         stw pv,124(r1)
842         stw r14,0(r1)
843         stw r15,4(r1)
844         stw r24,8(r1)
845         stw r25,12(r1)
846         stw r26,16(r1)
847         stw r27,20(r1)
848         stw r28,24(r1)
849         stw r29,28(r1)
850         stw r30,32(r1)
851         stw r31,36(r1)
852         stfd f14,40(r1)
853         stfd f15,48(r1)
854         stfd f24,56(r1)
855         stfd f25,64(r1)
856         stfd f26,72(r1)
857         stfd f27,80(r1)
858         stfd f28,88(r1)
859         stfd f29,96(r1)
860         stfd f30,104(r1)
861         stfd f31,112(r1)
862
863         stw r16,128(r1)
864         stw r17,132(r1)
865         stw r18,136(r1)
866         stw r19,140(r1)
867         stw r20,144(r1)
868         stw r21,148(r1)
869         stw r22,152(r1)
870         stw r23,156(r1)
871         stfd f16,160(r1)
872         stfd f17,168(r1)
873         stfd f18,176(r1)
874         stfd f19,184(r1)
875         stfd f20,192(r1)
876         stfd f21,200(r1)
877         stfd f22,208(r1)
878         stfd f23,216(r1)
879
880         stw r1,0(r3)
881         stw r1,0(r5)
882         lwz r1,0(r4)
883
884         lwz r0,120(r1)
885         lwz pv,124(r1)
886         lwz r14,0(r1)
887         lwz r15,4(r1)
888         lwz r24,8(r1)
889         lwz r25,12(r1)
890         lwz r26,16(r1)
891         lwz r27,20(r1)
892         lwz r28,24(r1)
893         lwz r29,28(r1)
894         lwz r30,32(r1)
895         lwz r31,36(r1)
896         lfd f14,40(r1)
897         lfd f15,48(r1)
898         lfd f24,56(r1)
899         lfd f25,64(r1)
900         lfd f26,72(r1)
901         lfd f27,80(r1)
902         lfd f28,88(r1)
903         lfd f29,96(r1)
904         lfd f30,104(r1)
905         lfd f31,112(r1)
906
907         lwz r16,128(r1)
908         lwz r17,132(r1)
909         lwz r18,136(r1)
910         lwz r19,140(r1)
911         lwz r20,144(r1)
912         lwz r21,148(r1)
913         lwz r22,152(r1)
914         lwz r23,156(r1)
915         lfd f16,160(r1)
916         lfd f17,168(r1)
917         lfd f18,176(r1)
918         lfd f19,184(r1)
919         lfd f20,192(r1)
920         lfd f21,200(r1)
921         lfd f22,208(r1)
922         lfd f23,216(r1)
923
924         mtlr r0
925         addi r1,r1,224
926         blr
927
928
929
930 .globl _asm_switchstackandcall
931 _asm_switchstackandcall:
932         mflr r0
933         addi r3,r3,-48
934         stw r0,40(r3)
935         stw r1,44(r3)
936         stw r1,0(r5)
937         mr r1,r3
938
939         mtctr r4
940         mr r3,r6
941         bctrl
942
943         lwz r0,40(r1)
944         mtlr r0
945         lwz r1,44(r1)
946         blr
947
948
949
950         .globl _my_dump
951 _my_dump:
952         mflr r0
953         bl 0f
954 0:
955         mflr itmp1
956         mtlr r0
957         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(itmp1)
958         lwz xptr,0(xptr)
959         b _asm_handle_exception
960
961
962
963
964
965 #define C_RED_ZONE 224
966
967 catch_Handler:
968         .long _catch_Handler
969
970         .globl _asm_sighandler
971 _asm_sighandler:
972         addi r1,r1,-32*4 - 32 - C_RED_ZONE
973         stmw r0,32(r1)
974         mflr r0
975         stw r0,28(r1)
976
977         bl 0f
978 0:
979         mflr r31
980         lwz r0,lo16(catch_Handler-0b)(r31)
981         mtctr r0
982         addi r3,r1,32
983         bctrl
984         
985         lwz r0,28(r1)
986         mtlr r0
987         cmpwi r3,0
988         bne 1f
989         lmw r2,32+8(r1)
990         lwz r0,32(r1)
991         addi r1,r1,32*4 + 32 + C_RED_ZONE
992         b _asm_handle_exception
993
994 1:
995         mtctr r3
996         lmw r2,32+8(r1)
997         lwz r0,32(r1)
998         addi r1,r1,32*4 + 32 + C_RED_ZONE
999         bctr