- added gnu header and emacs tailer
[cacao.git] / src / vm / jit / powerpc / asmpart.S
1 /* jit/powerpc/asmpart.S - Java-C interface functions for powerpc
2                 
3    Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
4    Institut f. Computersprachen, TU Wien
5    R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser, M. Probst,
6    S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich,
7    J. Wenninger
8
9    This file is part of CACAO.
10
11    This program is free software.text;  you can redistribute it and/or
12    modify it under the terms of the GNU General Public License as
13    published by the Free Software Foundation;  either version 2, or (at
14    your option) any later version.
15
16    This program is distributed in the hope that it will be useful, but
17    WITHOUT ANY WARRANTY ;  without even the implied warranty of
18    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19    General Public License for more details.
20
21    You should have received a copy of the GNU General Public License
22    along with this program;  if not, write to the Free Software
23    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
24    02111-1307, USA.
25
26    Contact: cacao@complang.tuwien.ac.at
27
28    Authors: Andreas Krall
29             Reinhard Grafl
30
31    $Id: asmpart.S 961 2004-03-15 00:35:39Z twisti $
32
33 */
34
35
36 #include "offsets.h"
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         .text
50
51         .align 2
52
53         .globl _builtin_throw_exception
54         .globl _jit_compile
55         .globl _asm_check_clinit
56         .globl _asm_builtin_checkarraycast
57         .globl _class_init
58         .globl _builtin_canstore
59         .globl _builtin_trace_exception
60         .globl _builtin_monitorenter
61         .globl _builtin_monitorexit
62         .globl _builtin_ldiv
63         .globl _builtin_lrem
64         .globl _builtin_checkarraycast
65         .globl _proto_java_lang_NullPointerException
66         .globl _proto_java_lang_ArrayIndexOutOfBoundsException
67         .globl _proto_java_lang_ArrayStoreException
68         .globl _proto_java_lang_ArithmeticException
69         .globl _proto_java_lang_ClassCastException
70
71         .globl _catch_Handler
72                 
73 #define     MethodPointer   -8
74 #define     FrameSize       -12
75 #define     IsSync          -16
76 #define     IsLeaf          -20
77 #define     IntSave         -24
78 #define     FltSave         -28
79 #define     ExTableSize     -32
80 #define     ExTableStart    -32
81
82 #define     ExEntrySize     -16
83 #define     ExStartPC       -4
84 #define     ExEndPC         -8
85 #define     ExHandlerPC     -12
86 #define     ExCatchType     -16
87
88         .align 2
89 builtinthrow:
90         .long _builtin_throw_exception
91
92         .align 2
93     .long   0                         /* catch type all                       */
94     .long   calljava_xhandler         /* handler pc                           */
95     .long   calljava_xhandler         /* end pc                               */
96     .long   _asm_calljavafunction     /* start pc                             */
97     .long   1                         /* extable size                         */
98     .long   0                         /* fltsave                              */
99     .long   0                         /* intsave                              */
100     .long   0                         /* isleaf                               */
101     .long   0                         /* IsSync                               */
102     .long   24                        /* frame size                           */
103     .long   0                         /* method pointer (pointer to name)     */
104         .long   0                         /* padding                              */
105
106
107 .globl _asm_docalljavamethod
108 _asm_docalljavamethod:
109         mflr    r0
110         stw     r31,-4(r1)
111 //      stw     r30,-8(r1)
112         stw     pv,-12(r1)
113         stw     r0,8(r1)
114         stwu    r1,-148(r1)
115         bl      0f
116 0:
117         mflr    r31
118
119         stw             r16,40(r1)
120         stw             r17,44(r1)
121         stw             r18,48(r1)
122         stw             r19,52(r1)
123         stw             r20,56(r1)
124         stw             r21,60(r1)
125         stw             r22,64(r1)
126         stw             r23,68(r1)
127         stfd    f16,72(r1)
128         stfd    f17,80(r1)
129         stfd    f18,88(r1)
130         stfd    f19,96(r1)
131         stfd    f20,104(r1)
132         stfd    f21,112(r1)
133         stfd    f22,120(r1)
134         stfd    f23,128(r1)
135
136         stw     r3,36(r1)
137         addi    r2,r1,36
138         mr      r3,r4
139         mr      r4,r5
140         mr      r5,r6
141         mr      r6,r7
142
143 //      addis   mptr,r31,ha16(_asm_call_jit_compiler-0b)
144         addi    mptr,r31,lo16(_asm_call_jit_compiler-0b)
145         stw     mptr,32(r1)
146         addi    mptr,r1,28
147
148         lwz     pv,4(mptr)
149         mtctr   pv
150         bctrl
151 1:
152         mflr    itmp1
153         addi    pv,itmp1,lo16(_asm_docalljavamethod-1b)
154
155 calljava_regrestore:
156         lwz     r16,40(r1)
157         lwz             r17,44(r1)
158         lwz             r18,48(r1)
159         lwz             r19,52(r1)
160         lwz             r20,56(r1)
161         lwz             r21,60(r1)
162         lwz             r22,64(r1)
163         lwz             r23,68(r1)
164         lfd             f16,72(r1)
165         lfd             f17,80(r1)
166         lfd             f18,88(r1)
167         lfd             f19,96(r1)
168         lfd             f20,104(r1)
169         lfd             f21,112(r1)
170         lfd             f22,120(r1)
171         lfd             f23,128(r1)
172
173         lwz     r0,148+8(r1)
174         mtlr    r0
175         addi    r1,r1,148
176         lwz     pv,-12(r1)
177 //      lwz     r30,-8(r1)
178         lwz     r31,-4(r1)
179         blr
180
181 calljava_xhandler:
182         mr      r3,itmp1
183 //      addis   pv,r31,ha16(builtinthrow-0b)
184         lwz     itmp1,lo16(builtinthrow-0b)(r31)
185         mtctr   itmp1
186         bctrl
187         b       calljava_regrestore
188
189
190
191
192         .align 2
193     .long   0                         /* catch type all                       */
194     .long   calljava_xhandler2        /* handler pc                           */
195     .long   calljava_xhandler2        /* end pc                               */
196     .long   _asm_calljavafunction2    /* start pc                             */
197     .long   1                         /* extable size                         */
198     .long   0                         /* fltsave                              */
199     .long   0                         /* intsave                              */
200     .long   0                         /* isleaf                               */
201     .long   0                         /* IsSync                               */
202     .long   24                        /* frame size                           */
203     .long   0                         /* method pointer (pointer to name)     */
204         .long   0                         /* padding                              */
205
206 .globl _asm_calljavafunction2
207 .globl _asm_calljavafunction2long
208 .globl _asm_calljavafunction2double
209 _asm_calljavafunction2:
210 _asm_calljavafunction2long:
211 _asm_calljavafunction2double:
212         mflr    r0
213         stw     r31,-4(r1)
214 //      stw     r30,-8(r1)
215         stw     pv,-12(r1)
216         stw     r0,8(r1)
217         addi    r1,r1,-148
218         bl      0f
219 0:
220         mflr    r31
221
222         stw     r16,40(r1)
223         stw         r17,44(r1)
224         stw     r18,48(r1)
225         stw         r19,52(r1)
226         stw     r20,56(r1)
227         stw     r21,60(r1)
228         stw     r22,64(r1)
229         stw     r23,68(r1)
230         stfd    f16,72(r1)
231         stfd    f17,80(r1)
232         stfd    f18,88(r1)
233         stfd    f19,96(r1)
234         stfd    f20,104(r1)
235         stfd    f21,112(r1)
236         stfd    f22,120(r1)
237         stfd    f23,128(r1)
238
239         stw     r3,36(r1)                 /* save method pointer for compiler     */
240         addi    r2,r1,36
241         mr      itmp1,r6                  /* pointer to arg block                 */
242         mr      itmp2,r4                  /* arg count                            */
243
244         mr.     itmp2,itmp2
245         ble     calljava_argsloaded
246
247         addi    itmp2,itmp2,-1
248         lwz     r3,offjniitem+4(itmp1)
249         mr.     itmp2,itmp2
250         ble     calljava_argsloaded
251
252         addi    itmp2,itmp2,-1
253         lwz     r4,offjniitem+sizejniblock*1+4(itmp1)
254         mr.     itmp2,itmp2
255         ble     calljava_argsloaded
256     addi    itmp2,itmp2,-1
257
258     addi    itmp2,itmp2,-1
259     lwz     r5,offjniitem+sizejniblock*2+4(itmp1)
260     mr.     itmp2,itmp2
261     ble     calljava_argsloaded
262     addi    itmp2,itmp2,-1
263
264     addi    itmp2,itmp2,-1
265     lwz     r6,offjniitem+sizejniblock*3+4(itmp1)
266     mr.     itmp2,itmp2
267     ble     calljava_argsloaded
268     addi    itmp2,itmp2,-1
269
270 calljava_argsloaded:
271 //      addis   mptr,r31,ha16(_asm_call_jit_compiler-0b)
272         addi    mptr,r31,lo16(_asm_call_jit_compiler-0b)
273         stw     mptr,32(r1)
274         addi    mptr,r1,28
275
276         lwz     pv,4(mptr)
277         mtctr   pv
278         bctrl
279 1:
280         mflr    itmp1
281         addi    pv,itmp1,lo16(_asm_docalljavamethod-1b)
282         
283 calljava_regrestore2:
284         lwz             r16,40(r1)
285         lwz             r17,44(r1)
286         lwz             r18,48(r1)
287         lwz             r19,52(r1)
288         lwz             r20,56(r1)
289         lwz             r21,60(r1)
290         lwz             r22,64(r1)
291         lwz             r23,68(r1)
292         lfd             f16,72(r1)
293         lfd             f17,80(r1)
294         lfd             f18,88(r1)
295         lfd             f19,96(r1)
296         lfd             f20,104(r1)
297         lfd             f21,112(r1)
298         lfd             f22,120(r1)
299         lfd             f23,128(r1)
300
301         lwz     r0,148+8(r1)
302         mtlr    r0
303         addi    r1,r1,148
304         lwz     pv,-12(r1)
305 //      lwz     r30,-8(r1)
306         lwz     r31,-4(r1)
307         blr
308
309 calljava_xhandler2:
310         mr      r3,itmp1
311 //      addis   pv,r31,ha16(builtinthrow-0b)
312         lwz     itmp1,lo16(builtinthrow-0b)(r31)
313         mtctr   itmp1
314         bctrl
315         b       calljava_regrestore2
316
317
318
319
320 jitcompile:
321         .long _jit_compile
322
323 .globl _asm_call_jit_compiler
324 _asm_call_jit_compiler:
325 0:
326         mflr    itmp1
327         stw     r31,-4(r1)
328 //      stw     pv,-8(r1)
329         stw     r29,-12(r1)
330         stw     itmp1,8(r1)
331         addi    r1,r1,-176
332         mr      r31,pv
333
334         lwz     itmp3,-12(itmp1)
335         srwi    itmp3,itmp3,16
336         andi.   itmp3,itmp3,31
337         cmpwi   itmp3,mptrn
338         beq     noregchange
339         lwz     itmp3,4(itmp1)
340         extsh   itmp3,itmp3
341         add     mptr,itmp3,itmp1
342         lwz     itmp3,8(itmp1)
343         srwi    itmp3,itmp3,16
344         cmpwi   itmp3,0x3dad
345         bne     noregchange
346         lwz     itmp3,8(itmp1)
347         slwi    itmp3,itmp3,16
348         add     mptr,mptr,itmp3
349                 
350 noregchange:
351         mr      r29,mptr
352         stw     r3,28(r1)
353         stw     r4,32(r1)
354         stw     r5,36(r1)
355         stw     r6,40(r1)
356         stw     r7,44(r1)
357         stw     r8,48(r1)
358         stw     r9,52(r1)
359         stfd    f1,56(r1)
360         stfd    f2,64(r1)
361         stfd    f3,72(r1)
362         stfd    f4,80(r1)
363         stfd    f5,88(r1)
364         stfd    f6,96(r1)
365         stfd    f7,104(r1)
366         stfd    f8,112(r1)
367         stfd    f9,120(r1)
368         stfd    f10,128(r1)
369         stfd    f11,136(r1)
370         stfd    f12,144(r1)
371         stfd    f13,152(r1)
372         stw     r10,160(r1)
373
374         lwz     r3,0(r2)
375 //      addis   pv,r31,ha16(jitcompile-0b)
376         lwz     itmp1,lo16(jitcompile-0b)(r31)
377         mtctr   itmp1
378         bctrl
379
380         mr      pv,r3
381         mr      mptr,r29
382         lwz     r3,28(r1)
383         lwz             r4,32(r1)
384         lwz             r5,36(r1)
385         lwz             r6,40(r1)
386         lwz             r7,44(r1)
387         lwz             r8,48(r1)
388         lwz             r9,52(r1)
389         lfd             f1,56(r1)
390         lfd             f2,64(r1)
391         lfd             f3,72(r1)
392         lfd             f4,80(r1)
393         lfd             f5,88(r1)
394         lfd             f6,96(r1)
395         lfd             f7,104(r1)
396         lfd             f8,112(r1)
397         lfd             f9,120(r1)
398         lfd             f10,128(r1)
399         lfd             f11,136(r1)
400         lfd             f12,144(r1)
401         lfd             f13,152(r1)
402         lwz             r10,160(r1)
403
404         lwz     itmp1,176+8(r1)
405         lwz     itmp3,-12(itmp1)
406         extsh   itmp3,itmp3
407         add     mptr,mptr,itmp3
408         stw     pv,0(mptr)
409
410         mtctr   pv
411
412         lwz     r0,176+8(r1)
413         mtlr    r0
414         addi    r1,r1,176
415         lwz     r29,-12(r1)
416 //      lwz     pv,-8(r1)
417         lwz     r31,-4(r1)
418         bctr
419
420
421 builtin_traceexception:
422         .long _builtin_trace_exception
423 builtin_monitorenter:
424         .long _builtin_monitorenter
425 builtin_monitorexit:
426         .long _builtin_monitorexit
427 builtin_ldiv:
428         .long _builtin_ldiv
429 builtin_lrem:
430         .long _builtin_lrem
431
432 .globl _asm_handle_nat_exception
433 _asm_handle_nat_exception:
434         mflr    r2
435         lwz     itmp3,4(r2)
436         extsh   itmp3,itmp3
437         add     pv,itmp3,r2
438         lwz     itmp3,8(r2)
439         srwi    itmp3,itmp3,16
440         cmpwi   itmp3,0x3dad
441         bne     _asm_handle_exception
442         lwz     itmp3,8(r2)
443         slwi    itmp3,itmp3,16
444         add     pv,pv,itmp3
445
446         .globl _asm_handle_exception
447 _asm_handle_exception:
448         addi    r1,r1,-18*4
449         stw     r0,0*4(r1)
450         stw     r2,1*4(r1)
451         stw     r3,2*4(r1)
452         stw     r4,3*4(r1)
453         stw     r5,4*4(r1)
454         stw     r6,5*4(r1)
455         stw     r7,6*4(r1)
456         stw     r8,7*4(r1)
457         stw     r9,8*4(r1)
458         stw     r10,9*4(r1)
459         stw     r16,10*4(r1)
460         stw     r17,11*4(r1)
461         stw     r18,12*4(r1)
462         stw     r19,13*4(r1)
463         stw     r20,14*4(r1)
464         stw     r21,15*4(r1)
465         stw     r22,16*4(r1)
466         stw     r23,17*4(r1)
467
468         li      r2,1
469 ex_stack_loop:
470         addi    r1,r1,-4*4
471         stw     xptr,0*4(r1)
472         stw     xpc,1*4(r1)
473         mflr    xptr
474         stw     xptr,2*4(r1)
475         stw     r2,3*4(r1)
476
477         lwz     r3,0*4(r1)                  /* exception pointer                  */
478         lwz     r4,MethodPointer(pv)        /* method pointer                     */
479         mr      r5,xpc                      /* exception pc                       */
480 /*      mr      r6,r2 */
481         li      r6,1                        /* set no unwind flag                 */
482
483         bl      0f
484 0:
485         mflr    itmp1
486         lwz     itmp1,lo16(builtin_traceexception-0b)(itmp1)
487         mtctr   itmp1
488         addi    r1,r1,-40
489         bctrl
490         addi    r1,r1,40
491
492         lwz xptr,2*4(r1)
493         mtlr xptr
494         lwz xptr,0*4(r1)
495         lwz xpc,1*4(r1)
496         lwz r2,3*4(r1)
497         addi r1,r1,4*4
498
499         lwz r3,ExTableSize(pv)
500         mr. r3,r3
501         beq empty_table
502         addi r4,pv,ExTableStart
503
504 ex_table_loop:
505         lwz r5,ExStartPC(r4)
506         cmplw r5,xpc
507         bgt ex_table_cont
508         lwz r5,ExEndPC(r4)
509         cmplw xpc,r5
510         bge ex_table_cont
511         lwz r7,ExCatchType(r4)
512         mr. r7,r7
513         beq ex_handle_it
514
515         lwz r6,offobjvftbl(xptr)
516         lwz r7,offclassvftbl(r7)
517         lwz r6,offbaseval(r6)
518         lwz r8,offbaseval(r7)
519         lwz r7,offdiffval(r7)
520         subf r6,r8,r6
521         cmplw r6,r7
522         bgt ex_table_cont
523
524 ex_handle_it:
525         lwz xpc,ExHandlerPC(r4)
526         mr. r2,r2
527         beq ex_jump
528
529         lwz r0,0*4(r1)
530         lwz r2,1*4(r1)
531         lwz r3,2*4(r1)
532         lwz r4,3*4(r1)
533         lwz r5,4*4(r1)
534         lwz r6,5*4(r1)
535         lwz r7,6*4(r1)
536         lwz r8,7*4(r1)
537         lwz r9,8*4(r1)
538         lwz r10,9*4(r1)
539         lwz r16,10*4(r1)
540         lwz r17,11*4(r1)
541         lwz r18,12*4(r1)
542         lwz r19,13*4(r1)
543         lwz r20,14*4(r1)
544         lwz r21,15*4(r1)
545         lwz r22,16*4(r1)
546         lwz r23,17*4(r1)
547         addi r1,r1,18*4
548
549 ex_jump:
550         mtctr xpc
551         bctr
552
553 ex_table_cont:
554         addi r4,r4,ExEntrySize
555         addic. r3,r3,-1
556         bgt ex_table_loop
557
558 empty_table:
559         mr. r2,r2
560         beq ex_already_cleared
561         addi r1,r1,18*4
562         li r2,0
563 ex_already_cleared:
564         lwz r3,IsSync(pv)
565         mr. r3,r3
566         beq no_monitor_exit
567         add r3,r1,r3
568         lwz r6,-4(r3)
569
570         addi r1,r1,-6*4
571         stw r3,0*4(r1)
572         stw r4,1*4(r1)
573         stw r2,2*4(r1)
574         stw xptr,3*4(r1)
575         stw xpc,4*4(r1)
576         mflr xptr
577         stw xptr,5*4(r1)
578
579         mr r3,r6
580         bl 0f
581 0:
582         mflr itmp1
583         lwz itmp1,lo16(builtin_monitorexit-0b)(itmp1)
584         mtctr itmp1
585         addi r1,r1,-40
586         bctrl
587         addi r1,r1,40
588
589         lwz xptr,5*4(r1)
590         mtlr xptr
591         lwz r3,0*4(r1)
592         lwz r4,1*4(r1)
593         lwz r2,2*4(r1)
594         lwz xptr,3*4(r1)
595         lwz xpc,4*4(r1)
596         addi r1,r1,6*4
597
598 no_monitor_exit:
599         lwz r3,FrameSize(pv)
600         add r1,r1,r3
601         mr r3,r1
602         lwz r4,IsLeaf(pv)
603         mr. r4,r4
604         bne ex_no_restore
605         lwz r4,8(r3)
606         mtlr r4
607 ex_no_restore:
608         mflr r4
609         mr xpc,r4
610         lwz r4,IntSave(pv)
611         bl ex_int1
612 ex_int1:
613         mflr r5
614         addi r5,r5,lo16(ex_int2-ex_int1)
615         slwi r4,r4,2
616         subf r5,r4,r5
617         mtctr r5
618         bctr
619         lwz r14,-40(r3)
620         lwz r15,-36(r3)
621         lwz r24,-32(r3)
622         lwz r25,-28(r3)
623         lwz r26,-24(r3)
624         lwz r27,-20(r3)
625         lwz r28,-16(r3)
626         lwz r29,-12(r3)
627         lwz r30,-8(r3)
628         lwz r31,-4(r3)
629 ex_int2:
630         subf r3,r4,r3
631
632         lwz r4,FltSave(pv)
633         bl ex_flt1
634 ex_flt1:
635         mflr r5
636         addi r5,r5,lo16(ex_flt2-ex_flt1)
637         slwi r4,r4,2
638         subf r5,r4,r5
639         mtctr r5
640         bctr
641         lfd f14,-80(r3)
642         lfd f15,-72(r3)
643         lfd f24,-64(r3)
644         lfd f25,-56(r3)
645         lfd f26,-48(r3)
646         lfd f27,-40(r3)
647         lfd f28,-32(r3)
648         lfd f29,-24(r3)
649         lfd f30,-16(r3)
650         lfd f31,-8(r3)
651 ex_flt2:
652         mtlr xpc
653         lwz itmp3,4(xpc)
654         extsh itmp3,itmp3
655         add pv,itmp3,xpc
656         lwz itmp3,8(xpc)
657         srwi itmp3,itmp3,16
658         cmpwi itmp3,0x3dad
659         bne ex_stack_loop
660         lwz itmp3,8(xpc)
661         slwi itmp3,itmp3,16
662         add pv,pv,itmp3
663         b ex_stack_loop
664
665
666 /********************* asm_check_clinit ****************************************
667 *                                                                              *
668 *   call static class initializer for PUT/GETSTATIC instructions               *
669 *                                                                              *
670 *******************************************************************************/
671
672 class_init:
673         .long _class_init
674                 
675 _asm_check_clinit:
676 0:
677         lwz     itmp2,offclassinit(itmp1)
678         mr.     itmp2,itmp2
679         bne     L_is_initialized
680
681         mflr    r0
682         stw     r0,8(r1)
683         addi    r1,r1,-(24*8)
684
685     stw     r3,3*8(r1)                  /* save argument registers            */
686     stw     r4,4*8(r1)                  /* preserve linkage area (24 bytes)   */
687     stw     r5,5*8(r1)
688     stw     r6,6*8(r1)
689     stw     r7,7*8(r1)
690     stw     r8,8*8(r1)
691     stw     r9,9*8(r1)
692         stw     r10,10*8(r1)
693
694         stfd    f1,11*8(r1)
695     stfd    f2,12*8(r1)
696     stfd    f3,13*8(r1)
697     stfd    f4,14*8(r1)
698     stfd    f5,15*8(r1)
699     stfd    f6,16*8(r1)
700     stfd    f7,17*8(r1)
701     stfd    f8,18*8(r1)
702     stfd    f9,19*8(r1)
703     stfd    f10,20*8(r1)
704     stfd    f11,21*8(r1)
705     stfd    f12,22*8(r1)
706     stfd    f13,23*8(r1)
707                 
708         mr      r3,itmp1
709         lwz     itmp1,lo16(class_init-0b)(pv)
710         mtctr   itmp1
711         bctrl
712
713         lwz     r3,3*8(r1)
714         lwz     r4,4*8(r1)
715         lwz     r5,5*8(r1)
716         lwz     r6,6*8(r1)
717         lwz     r7,7*8(r1)
718         lwz     r8,8*8(r1)
719         lwz     r9,9*8(r1)
720         lwz     r10,10*8(r1)
721
722     lfd     f1,11*8(r1)
723     lfd     f2,12*8(r1)
724     lfd     f3,13*8(r1)
725     lfd         f4,14*8(r1)
726     lfd         f5,15*8(r1)
727     lfd         f6,16*8(r1)
728     lfd         f7,17*8(r1)
729     lfd         f8,18*8(r1)
730     lfd         f9,19*8(r1)
731     lfd         f10,20*8(r1)
732     lfd         f11,21*8(r1)
733     lfd         f12,22*8(r1)
734     lfd         f13,23*8(r1)
735                 
736         lwz     r0,(24*8)+8(r1)
737         mtlr    r0
738         addi    r1,r1,(24*8)
739
740 L_is_initialized:
741         blr
742
743
744 _asm_builtin_checkarraycast:
745 0:
746         mflr r0
747         stw r0,8(r1)
748         stwu r1,-48(r1)
749
750         stw r3,32(r1)
751         lwz itmp1,lo16(builtincheckarraycast-0b)(pv)
752         mtctr itmp1
753         bctrl
754
755         lwz r0,48+8(r1)
756         mtlr r0
757         mr. r3,r3
758         beq nb_carray_throw
759         lwz r3,32(r1)
760         addi r1,r1,48
761         blr
762
763 nb_carray_throw:
764         lwz xptr,lo16(proto_java_lang_ClassCastException-0b)(pv)
765         lwz xptr,0(xptr)
766         addi r1,r1,48
767         mflr xpc
768         b _asm_handle_nat_exception
769
770 .globl _asm_builtin_checkcast
771 _asm_builtin_checkcast:
772 0:
773         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
774         lwz xptr,0(xptr)
775         mflr xpc
776         b _asm_handle_nat_exception
777
778
779         
780         
781         
782         
783         
784 builtincanstore:
785         .long _builtin_canstore
786 builtincheckarraycast:
787         .long _builtin_checkarraycast
788         
789 .globl _asm_builtin_aastore
790 _asm_builtin_aastore:
791 0:
792         mr. r3,r3
793         beq nb_aastore_null
794         mflr r0
795         stw r0,8(r1)
796         stwu r1,-48(r1)
797
798         lwz itmp1,offarraysize(r3)
799         slwi itmp3,r4,2
800         add itmp2,r3,itmp3
801         cmplw r4,itmp1
802         bge nb_aastore_bound
803         mr r4,r5
804         stw itmp2,32(r1)
805         stw r4,36(r1)
806 //      addis pv,r31,ha16(builtincanstore-0b)
807         lwz itmp1,lo16(builtincanstore-0b)(pv)
808         mtctr itmp1
809         bctrl
810
811         lwz r0,48+8(r1)
812         mtlr r0
813         lwz itmp1,32(r1)
814         lwz itmp2,36(r1)
815         addi r1,r1,48
816         mr. r3,r3
817         beq nb_aastore_throw
818         stw itmp2,offobjarrdata(itmp1)
819         blr
820
821 proto_java_lang_NullPointerException:
822         .long _proto_java_lang_NullPointerException
823 proto_java_lang_ArrayIndexOutOfBoundsException:
824         .long _proto_java_lang_ArrayIndexOutOfBoundsException
825 proto_java_lang_ArrayStoreException:
826         .long _proto_java_lang_ArrayStoreException
827 proto_java_lang_ArithmeticException:
828         .long _proto_java_lang_ArithmeticException
829 proto_java_lang_ClassCastException:
830         .long _proto_java_lang_ClassCastException
831
832 nb_aastore_null:
833         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
834         lwz xptr,0(xptr)
835         mflr xpc
836         b _asm_handle_nat_exception
837 nb_aastore_bound:
838         lwz xptr,lo16(proto_java_lang_ArrayIndexOutOfBoundsException-0b)(pv)
839         lwz xptr,0(xptr)
840         addi r1,r1,48
841         mflr xpc
842         b _asm_handle_nat_exception
843 nb_aastore_throw:
844         lwz xptr,lo16(proto_java_lang_ArrayStoreException-0b)(pv)
845         lwz xptr,0(xptr)
846         mflr xpc
847         b _asm_handle_nat_exception
848
849
850
851 .globl _asm_dumpregistersandcall
852 _asm_dumpregistersandcall:
853         mflr r0
854         stw r0,8(r1)
855
856         stw r16,-72(r1)
857         stw r17,-68(r1)
858         stw r18,-64(r1)
859         stw r19,-60(r1)
860         stw r20,-56(r1)
861         stw r21,-52(r1)
862         stw r22,-48(r1)
863         stw r23,-44(r1)
864
865         stw r14,-40(r1)
866         stw r15,-36(r1)
867         stw r24,-32(r1)
868         stw r25,-28(r1)
869         stw r26,-24(r1)
870         stw r27,-20(r1)
871         stw r28,-16(r1)
872         stw r29,-12(r1)
873         stw r30,-8(r1)
874         stw r31,-4(r1)
875         addi r1,r1,-96
876
877         mtctr r3
878         bctrl
879
880         lwz r0,96+8(r1)
881         mtlr r0
882         addi r1,r1,96
883         blr
884
885         
886         
887 .globl _asm_builtin_monitorenter
888 _asm_builtin_monitorenter:
889 0:
890         lwz itmp2,lo16(builtin_monitorenter-0b)(pv)
891         mr. r3,r3
892         beq nb_monitorenter
893         mtctr itmp2
894         bctr
895 nb_monitorenter:
896         mflr r2
897         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
898         lwz xptr,0(xptr)
899         addi xpc,r2,-4
900         b _asm_handle_nat_exception
901
902 .globl _asm_builtin_monitorexit
903 _asm_builtin_monitorexit:
904 0:
905         lwz itmp2,lo16(builtin_monitorexit-0b)(pv)
906         mr. r3,r3
907         beq nb_monitorexit
908         mtctr itmp2
909         bctr
910 nb_monitorexit:
911         mflr r2
912         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(pv)
913         lwz xptr,0(xptr)
914         addi xpc,r2,-4
915         b _asm_handle_nat_exception
916         
917         
918         
919         
920         
921 .globl _synchronize_caches
922 _synchronize_caches:
923         blr
924 .globl _asm_getcallingmethod
925 _asm_getcallingmethod:
926         li r3,0
927         blr
928
929 .globl _asm_builtin_ldiv
930 _asm_builtin_ldiv:
931 0:
932         or. r0,r5,r6
933         beq nb_ldiv
934         lwz itmp1,lo16(builtin_ldiv-0b)(pv)
935         mtctr itmp1
936         bctr
937 nb_ldiv:
938         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
939         lwz xptr,0(xptr)
940         mflr xpc
941         b _asm_handle_nat_exception
942
943 .globl _asm_builtin_lrem
944 _asm_builtin_lrem:
945 0:
946         or. r0,r5,r6
947         beq nb_lrem
948         lwz itmp1,lo16(builtin_lrem-0b)(pv)
949         mtctr itmp1
950         bctr
951 nb_lrem:
952         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
953         lwz xptr,0(xptr)
954         mflr xpc
955         b _asm_handle_nat_exception
956
957 .globl _asm_builtin_idiv
958 _asm_builtin_idiv:
959 0:
960         mr. r4,r4
961         beq nb_idiv
962         lis itmp3,0x8000
963         cmpw r3,itmp3
964         bne normal_idiv
965         cmpwi r4,-1
966         bne normal_idiv
967         blr
968 normal_idiv:
969         divw r3,r3,r4
970         blr
971 nb_idiv:
972         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
973         lwz xptr,0(xptr)
974         mflr xpc
975         b _asm_handle_nat_exception
976
977 .globl _asm_builtin_irem
978 _asm_builtin_irem:
979 0:
980         mr itmp2,r3
981         mr. r4,r4
982         beq nb_irem
983         lis itmp3,0x8000
984         cmpw itmp2,itmp3
985         bne normal_irem
986         cmpwi r4,-1
987         bne normal_irem
988         li r3,0
989         beqlr
990 normal_irem:
991         divw itmp3,itmp2,r4
992         mullw itmp3,itmp3,r4
993         subf r3,itmp3,itmp2
994         blr
995 nb_irem:
996         lwz xptr,lo16(proto_java_lang_ArithmeticException-0b)(pv)
997         lwz xptr,0(xptr)
998         mflr xpc
999         b _asm_handle_nat_exception
1000
1001
1002         
1003         
1004 .globl _has_no_x_instr_set
1005 _has_no_x_instr_set:
1006         li r3,0
1007         blr
1008
1009
1010         .globl _asm_cacheflush
1011 _asm_cacheflush:
1012         addi r4,r4,31
1013         mr r5,r3
1014         add r4,r3,r4
1015 1:
1016         cmplw r3,r4
1017         bge 0f
1018         dcbst 0,r3
1019         addi r3,r3,32
1020         b 1b
1021 0:
1022         sync
1023 1:
1024         cmplw r5,r4
1025         bge 0f
1026         icbi 0,r5
1027         addi r5,r5,32
1028         b 1b
1029 0:
1030         sync
1031         isync
1032         blr
1033
1034         .align 3
1035 doublezero:
1036         .double 0.0
1037
1038 .globl _asm_initialize_thread_stack
1039 _asm_initialize_thread_stack:
1040         addi r4,r4,-256
1041         stw r3,120(r4)
1042         li r3,0
1043         stw r3,124(r4)
1044         stw r3,0(r4)
1045         stw r3,4(r4)
1046         stw r3,8(r4)
1047         stw r3,12(r4)
1048         stw r3,16(r4)
1049         stw r3,20(r4)
1050         stw r3,24(r4)
1051         stw r3,28(r4)
1052         stw r3,32(r4)
1053         stw r3,36(r4)
1054
1055         stw r3,128(r4)
1056         stw r3,132(r4)
1057         stw r3,136(r4)
1058         stw r3,140(r4)
1059         stw r3,144(r4)
1060         stw r3,148(r4)
1061         stw r3,152(r4)
1062         stw r3,156(r4)
1063
1064         mflr r0
1065         bl 0f
1066 0:
1067         mflr r3
1068         mtlr r0
1069         lfd f0,lo16(doublezero-0b)(r3)
1070
1071         stfd f0,40(r4)
1072         stfd f0,48(r4)
1073         stfd f0,56(r4)
1074         stfd f0,64(r4)
1075         stfd f0,72(r4)
1076         stfd f0,80(r4)
1077         stfd f0,88(r4)
1078         stfd f0,96(r4)
1079         stfd f0,104(r4)
1080         stfd f0,112(r4)
1081
1082         stfd f0,160(r4)
1083         stfd f0,168(r4)
1084         stfd f0,176(r4)
1085         stfd f0,184(r4)
1086         stfd f0,192(r4)
1087         stfd f0,200(r4)
1088         stfd f0,208(r4)
1089         stfd f0,216(r4)
1090
1091         mr r3,r4
1092         blr
1093
1094 .globl _asm_perform_threadswitch
1095 _asm_perform_threadswitch:
1096         mflr r0
1097         addi r1,r1,-224
1098         stw r0,120(r1)
1099         stw pv,124(r1)
1100         stw r14,0(r1)
1101         stw r15,4(r1)
1102         stw r24,8(r1)
1103         stw r25,12(r1)
1104         stw r26,16(r1)
1105         stw r27,20(r1)
1106         stw r28,24(r1)
1107         stw r29,28(r1)
1108         stw r30,32(r1)
1109         stw r31,36(r1)
1110         stfd f14,40(r1)
1111         stfd f15,48(r1)
1112         stfd f24,56(r1)
1113         stfd f25,64(r1)
1114         stfd f26,72(r1)
1115         stfd f27,80(r1)
1116         stfd f28,88(r1)
1117         stfd f29,96(r1)
1118         stfd f30,104(r1)
1119         stfd f31,112(r1)
1120
1121         stw r16,128(r1)
1122         stw r17,132(r1)
1123         stw r18,136(r1)
1124         stw r19,140(r1)
1125         stw r20,144(r1)
1126         stw r21,148(r1)
1127         stw r22,152(r1)
1128         stw r23,156(r1)
1129         stfd f16,160(r1)
1130         stfd f17,168(r1)
1131         stfd f18,176(r1)
1132         stfd f19,184(r1)
1133         stfd f20,192(r1)
1134         stfd f21,200(r1)
1135         stfd f22,208(r1)
1136         stfd f23,216(r1)
1137
1138         stw r1,0(r3)
1139         stw r1,0(r5)
1140         lwz r1,0(r4)
1141
1142         lwz r0,120(r1)
1143         lwz pv,124(r1)
1144         lwz r14,0(r1)
1145         lwz r15,4(r1)
1146         lwz r24,8(r1)
1147         lwz r25,12(r1)
1148         lwz r26,16(r1)
1149         lwz r27,20(r1)
1150         lwz r28,24(r1)
1151         lwz r29,28(r1)
1152         lwz r30,32(r1)
1153         lwz r31,36(r1)
1154         lfd f14,40(r1)
1155         lfd f15,48(r1)
1156         lfd f24,56(r1)
1157         lfd f25,64(r1)
1158         lfd f26,72(r1)
1159         lfd f27,80(r1)
1160         lfd f28,88(r1)
1161         lfd f29,96(r1)
1162         lfd f30,104(r1)
1163         lfd f31,112(r1)
1164
1165         lwz r16,128(r1)
1166         lwz r17,132(r1)
1167         lwz r18,136(r1)
1168         lwz r19,140(r1)
1169         lwz r20,144(r1)
1170         lwz r21,148(r1)
1171         lwz r22,152(r1)
1172         lwz r23,156(r1)
1173         lfd f16,160(r1)
1174         lfd f17,168(r1)
1175         lfd f18,176(r1)
1176         lfd f19,184(r1)
1177         lfd f20,192(r1)
1178         lfd f21,200(r1)
1179         lfd f22,208(r1)
1180         lfd f23,216(r1)
1181
1182         mtlr r0
1183         addi r1,r1,224
1184         blr
1185
1186
1187
1188 .globl _asm_switchstackandcall
1189 _asm_switchstackandcall:
1190         mflr r0
1191         addi r3,r3,-48
1192         stw r0,40(r3)
1193         stw r1,44(r3)
1194         stw r1,0(r5)
1195         mr r1,r3
1196
1197         mtctr r4
1198         mr r3,r6
1199         bctrl
1200
1201         lwz r0,40(r1)
1202         mtlr r0
1203         lwz r1,44(r1)
1204         blr
1205
1206
1207
1208         .globl _my_dump
1209 _my_dump:
1210         mflr r0
1211         bl 0f
1212 0:
1213         mflr itmp1
1214         mtlr r0
1215         lwz xptr,lo16(proto_java_lang_NullPointerException-0b)(itmp1)
1216         lwz xptr,0(xptr)
1217         b _asm_handle_exception
1218
1219
1220
1221
1222
1223 #define C_RED_ZONE 224
1224
1225 catch_Handler:
1226         .long _catch_Handler
1227
1228         .globl _asm_sighandler
1229 _asm_sighandler:
1230         addi r1,r1,-32*4 - 32 - C_RED_ZONE
1231         stmw r0,32(r1)
1232         mflr r0
1233         stw r0,28(r1)
1234
1235         bl 0f
1236 0:
1237         mflr r31
1238         lwz r0,lo16(catch_Handler-0b)(r31)
1239         mtctr r0
1240         addi r3,r1,32
1241         bctrl
1242         
1243         lwz r0,28(r1)
1244         mtlr r0
1245         cmpwi r3,0
1246         bne 1f
1247         lmw r2,32+8(r1)
1248         lwz r0,32(r1)
1249         addi r1,r1,32*4 + 32 + C_RED_ZONE
1250         b _asm_handle_exception
1251
1252 1:
1253         mtctr r3
1254         lmw r2,32+8(r1)
1255         lwz r0,32(r1)
1256         addi r1,r1,32*4 + 32 + C_RED_ZONE
1257         bctr
1258
1259
1260 /*
1261  * These are local overrides for various environment variables in Emacs.
1262  * Please do not remove this and leave it at the end of the file, where
1263  * Emacs will automagically detect them.
1264  * ---------------------------------------------------------------------
1265  * Local variables:
1266  * mode: asm
1267  * indent-tabs-mode: t
1268  * c-basic-offset: 4
1269  * tab-width: 4
1270  * End:
1271  */