* Again, new and simpler stacktraces
[cacao.git] / src / vm / jit / alpha / asmpart.S
index b9d1c5ac6db6ebee9f4465f34e71841a4e4f7f50..8c0d58f0bbafab44438b0f3cb0b2b7e72321270c 100644 (file)
@@ -1,10 +1,9 @@
-/* vm/jit/alpha/asmpart.S - Java-C interface functions for alpha
+/* src/vm/jit/alpha/asmpart.S - Java-C interface functions for alpha
 
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   Institut f. Computersprachen, TU Wien
-   R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser, M. Probst,
-   S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich,
-   J. Wenninger
+   Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
+   R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
+   C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
+   Institut f. Computersprachen - TU Wien
 
    This file is part of CACAO.
 
@@ -29,8 +28,9 @@
             Reinhard Grafl
 
    Changes: Joseph Wenninger
+            Christian Thalinger
 
-   $Id: asmpart.S 1690 2004-12-06 08:48:07Z twisti $
+   $Id: asmpart.S 2992 2005-07-11 21:52:07Z twisti $
 
 */
 
 #include "config.h"        
 #include "vm/jit/alpha/offsets.h"
 #include "vm/jit/alpha/asmoffsets.h"
+#include "vm/jit/alpha/md-asm.h"
 
 
-#define        MethodPointer   -8
-#define        FrameSize       -12
-#define     IsSync          -16
-#define     IsLeaf          -20
-#define     IntSave         -24
-#define     FltSave         -28
-/* DEFINE LINE NUMBER STUFF HERE */
-#define     ExTableSize     -56
-#define     ExTableStart    -56
-
-#define     ExEntrySize     -32
-#define     ExStartPC       -8
-#define     ExEndPC         -16
-#define     ExHandlerPC     -24
-#define     ExCatchType     -32
-
-
-#define v0      $0
-
-#define t0      $1
-#define t1      $2
-#define t2      $3
-#define t3      $4
-#define t4      $5
-#define t5      $6
-#define t6      $7
-#define t7      $8
-
-#define        s0      $9
-#define        s1      $10
-#define        s2      $11
-#define        s3      $12
-#define        s4      $13
-#define        s5      $14
-#define        s6      $15
-
-#define a0      $16
-#define a1      $17
-#define a2      $18
-#define a3      $19
-#define a4      $20
-#define a5      $21
-
-#define t8      $22
-#define t9      $23
-#define t10     $24
-#define t11     $25
-#define ra      $26
-#define t12     $27
-
-#define pv      t12
-#define AT      $at
-#define gp      $29
-#define sp      $30
-#define zero    $31
-
-#define itmp1   $25
-#define itmp2   $28
-#define itmp3   $29
-
-#define xptr    itmp1
-#define xpc     itmp2
-
-#define sf0     $f2
-#define sf1     $f3
-#define sf2     $f4
-#define sf3     $f5
-#define sf4     $f6
-#define sf5     $f7
-#define sf6     $f8
-#define sf7     $f9
-
-#define fzero   $f31
-
-
-#define PAL_imb 0x86
-
        .text
        .set    noat
        .set    noreorder
 
 /********************* exported functions and variables ***********************/
 
+       .globl asm_sync_instruction_cache
        .globl has_no_x_instr_set
-       .globl synchronize_caches
+
        .globl asm_calljavafunction
+       .globl asm_calljavafunction_int
+
        .globl asm_calljavafunction2
-       .globl asm_calljavafunction2double
+       .globl asm_calljavafunction2int
        .globl asm_calljavafunction2long
+       .globl asm_calljavafunction2float
+       .globl asm_calljavafunction2double
+
        .globl asm_call_jit_compiler
-       .globl asm_throw_and_handle_exception
-       .globl asm_throw_and_handle_nat_exception
-       .globl asm_throw_and_handle_arithmetic_exception
-       .globl asm_throw_and_handle_arrayindexoutofbounds_exception
        .globl asm_handle_exception
        .globl asm_handle_nat_exception
-       .globl asm_check_clinit
-       .globl asm_builtin_checkcast    
-       .globl asm_builtin_checkarraycast
-       .globl asm_builtin_aastore
-       .globl asm_builtin_monitorenter
-       .globl asm_builtin_monitorexit
-       .globl asm_builtin_idiv
-       .globl asm_builtin_irem
-       .globl asm_builtin_ldiv
-       .globl asm_builtin_lrem
+
+       .globl asm_wrapper_patcher
+
        .globl asm_perform_threadswitch
        .globl asm_initialize_thread_stack
        .globl asm_switchstackandcall
-       .globl asm_builtin_trace
-       .globl asm_builtin_exittrace
        .globl asm_criticalsections
        .globl asm_getclassvalues_atomic
-       .globl asm_prepare_native_stackinfo
-       .globl asm_remove_native_stackinfo
-       .globl asm_refillin_and_handle_exception
 
-/*************************** imported functions *******************************/
 
-       .globl jit_compile
-       .globl builtin_monitorexit
-       .globl builtin_throw_exception
-       .globl builtin_trace_exception
-       .globl class_java_lang_Object
+/* asm_sync_instruction_cache **************************************************
 
+   XXX
+
+*******************************************************************************/
+
+       .ent    asm_sync_instruction_cache
+
+asm_sync_instruction_cache:
+       call_pal PAL_imb              /* synchronize instruction cache            */
+       jmp     zero,(ra)
+
+       .end    asm_sync_instruction_cache
 
 /*********************** function has_no_x_instr_set ***************************
 *                                                                              *
@@ -220,6 +140,7 @@ call_name:
        .quad   0                         /* method pointer (pointer to name)     */
 
 asm_calljavafunction:
+asm_calljavafunction_int:
        ldgp    gp,0(pv)
        lda     sp,-32(sp)                /* allocate stack space                 */
        stq     gp,24(sp)                 /* save global pointer                  */
@@ -233,14 +154,14 @@ asm_calljavafunction:
        mov     a3,a2
        mov     a4,a3
 
-       lda     $28,asm_call_jit_compiler /* fake virtual function call (2 instr) */
-       stq     $28,8(sp)                 /* store function address               */
-       mov     sp,$28                    /* set method pointer                   */
+       lda     itmp2,asm_call_jit_compiler/* fake virtual function call (2 instr)*/
+       stq     itmp2,8(sp)               /* store function address               */
+       mov     sp,itmp2                  /* set method pointer                   */
 
-       ldq     pv,8($28)                 /* method call as in Java               */
+       ldq     pv,8(itmp2)               /* method call as in Java               */
        jmp     ra,(pv)                   /* call JIT compiler                    */
 calljava_jit:
-       lda     pv,-64(ra)                /* asm_calljavafunction-calljava_jit !!!!!*/
+       lda     pv,(asm_calljavafunction - calljava_jit)(ra)
 
 calljava_return:
        ldq     ra,0(sp)                  /* restore return address               */
@@ -252,10 +173,11 @@ calljava_ret:
 
 calljava_xhandler:
        ldq     gp,24(sp)                 /* restore global pointer               */
-       mov     itmp1,a0
+       mov     xptr,a0
        jsr     ra,builtin_throw_exception
        ldq     ra,0(sp)                  /* restore return address               */
        lda     sp,32(sp)                 /* free stack space                     */
+       mov     zero,v0                   /* return NULL                          */
        jmp     zero,(ra)
        .end    asm_calljavafunction
 
@@ -265,18 +187,17 @@ calljava_xhandler:
        .ent    asm_calljavafunction2
 
 call_name2:
-       .ascii  "calljavafunction2\0\0"
-
        .align  3
+
        .quad   0                         /* catch type all                       */
        .quad   calljava_xhandler2        /* handler pc                           */
        .quad   calljava_xhandler2        /* end pc                               */
        .quad   asm_calljavafunction2     /* start pc                             */
        .long   1                         /* extable size                         */
-       .long   0                         /* PADDING */
-       .quad   0                         /* line number table start             */
-       .quad   0                         /* line number table size             */
-       .long   0                         /* PADDING */
+       .long   0                         /* PADDING                              */
+       .quad   0                         /* line number table start              */
+       .quad   0                         /* line number table size               */
+       .long   0                         /* PADDING                              */
        .long   0                         /* fltsave                              */
        .long   1                         /* intsave                              */
        .long   0                         /* isleaf                               */
@@ -285,15 +206,17 @@ call_name2:
        .quad   0                         /* method pointer (pointer to name)     */
 
 asm_calljavafunction2:
-asm_calljavafunction2double:
+asm_calljavafunction2int:
 asm_calljavafunction2long:
+asm_calljavafunction2float:
+asm_calljavafunction2double:
        ldgp    gp,0(pv)
-       lda     sp,-40(sp)                /* allocate stack space                 */
-       stq     ra,0(sp)                  /* save return address                  */
-       stq     s6,24(sp)
-       stq     gp,8(sp)                  /* save global pointer                  */
+       lda     sp,-5*8(sp)               /* allocate stack space                 */
+       stq     ra,0*8(sp)                /* save return address                  */
+       stq     gp,1*8(sp)                /* save global pointer                  */
+       stq     s6,3*8(sp)
 
-       stq     a0,32(sp)                 /* save method pointer for compiler     */
+       stq     a0,4*8(sp)                /* save method pointer for compiler     */
        mov     a3,t0                     /* pointer to arg block                 */
        mov     a1,s6                     /* arg count                            */
 
@@ -302,22 +225,27 @@ asm_calljavafunction2long:
        ldq     a0,offjniitem(t0)
        ldt     $f16,offjniitem(t0)
        ble     s6,calljava_argsloaded
+
        lda     s6,-1(s6)
        ldq     a1,offjniitem+sizejniblock*1(t0)
        ldt     $f17,offjniitem+sizejniblock*1(t0)
        ble     s6,calljava_argsloaded
+
        lda     s6,-1(s6)
        ldq     a2,offjniitem+sizejniblock*2(t0)
        ldt     $f18,offjniitem+sizejniblock*2(t0)
        ble     s6,calljava_argsloaded
+
        lda     s6,-1(s6)
        ldq     a3,offjniitem+sizejniblock*3(t0)
        ldt     $f19,offjniitem+sizejniblock*3(t0)
        ble     s6,calljava_argsloaded
+
        lda     s6,-1(s6)
        ldq     a4,offjniitem+sizejniblock*4(t0)
        ldt     $f20,offjniitem+sizejniblock*4(t0)
        ble     s6,calljava_argsloaded
+
        lda     s6,-1(s6)
        ldq     a5,offjniitem+sizejniblock*5(t0)
        ldt     $f21,offjniitem+sizejniblock*5(t0)
@@ -337,38 +265,40 @@ calljava_copyloop:
        bne     t1,calljava_copyloop
 
 calljava_nocopy:
-       lda     v0,32(t4)                 /* pass pointer to method pointer via v0*/
+       lda     v0,4*8(t4)                /* pass pointer to method pointer via v0*/
 
-       lda     $28,asm_call_jit_compiler /* fake virtual function call (2 instr) */
-       stq     $28,16(t4)                /* store function address               */
-       lda     $28,8(t4)                 /* set method pointer                   */
+       lda     itmp2,asm_call_jit_compiler/* fake virtual function call (2 instr)*/
+       stq     itmp2,16(t4)              /* store function address               */
+       lda     itmp2,8(t4)               /* set method pointer                   */
 
-       ldq     pv,8($28)                 /* method call as in Java               */
+       ldq     pv,8(itmp2)               /* method call as in Java               */
        jmp     ra,(pv)                   /* call JIT compiler                    */
 calljava_jit2:
-       lda     pv,-200(ra)               /* asm_calljavafunction-calljava_jit !!!*/
+       lda     pv,(asm_calljavafunction2 - calljava_jit2)(ra)
 
        s8addq  s6,sp,sp
 calljava_return2:
-       ldq     ra,0(sp)                  /* restore return address               */
-       ldq     gp,8(sp)                  /* restore global pointer               */
-       ldq     s6,24(sp)
-       lda     sp,40(sp)                 /* free stack space                     */
+       ldq     ra,0*8(sp)                /* restore return address               */
+       ldq     gp,1*8(sp)                /* restore global pointer               */
+       ldq     s6,3*8(sp)
+       lda     sp,5*8(sp)                /* free stack space                     */
 
 calljava_ret2:
        jmp     zero,(ra)
 
 calljava_xhandler2:
        s8addq  s6,sp,sp
-       ldq     gp,8(sp)                  /* restore global pointer               */
+       ldq     gp,1*8(sp)                /* restore global pointer               */
        mov     itmp1,a0
        jsr     ra,builtin_throw_exception
-       ldq     ra,0(sp)                  /* restore return address               */
-       ldq     s6,24(sp)
-       lda     sp,40(sp)                 /* free stack space                     */
+       ldq     ra,0*8(sp)                /* restore return address               */
+       ldq     s6,3*8(sp)
+       lda     sp,5*8(sp)                /* free stack space                     */
+       mov     zero,v0                   /* return NULL                          */
        jmp     zero,(ra)
+
        .end    asm_calljavafunction2
-                                               
+
 
 /****************** function asm_call_jit_compiler *****************************
 *                                                                              *
@@ -390,10 +320,9 @@ calljava_xhandler2:
 *                                                                              *
 *******************************************************************************/
 
-
        .ent    asm_call_jit_compiler
-asm_call_jit_compiler:
 
+asm_call_jit_compiler:
        ldgp    gp,0(pv)
        ldl     t8,-8(ra)             /* load instruction LDQ PV,xxx($yy)         */
        srl     t8,16,t8              /* shift right register number $yy          */
@@ -414,18 +343,9 @@ asm_call_jit_compiler:
        addq    t8,$28,$28            /* compute update address                   */
 noregchange:
        lda     sp,-14*8(sp)          /* reserve stack space                      */
-       stq     a0,0*8(sp)            /* save all argument registers              */
-       stq     a1,1*8(sp)            /* they could be used by method             */
-       stq     a2,2*8(sp)
-       stq     a3,3*8(sp)
-       stq     a4,4*8(sp)
-       stq     a5,5*8(sp)
-       stt     $f16,6*8(sp)
-       stt     $f17,7*8(sp)
-       stt     $f18,8*8(sp)
-       stt     $f19,9*8(sp)
-       stt     $f20,10*8(sp)
-       stt     $f21,11*8(sp)
+
+       SAVE_ARGUMENT_REGISTERS(0)    /* save 6 int/6 float argument registers    */
+
        stq     $28,12*8(sp)          /* save method pointer                      */
        stq     ra,13*8(sp)           /* save return address                      */
 
@@ -433,22 +353,14 @@ noregchange:
        jsr     ra,jit_compile        /* jit compiler                             */
        ldgp    gp,0(ra)
 
-       ldq     a0,0*8(sp)            /* load argument registers                  */
-       ldq     a1,1*8(sp)
-       ldq     a2,2*8(sp)
-       ldq     a3,3*8(sp)
-       ldq     a4,4*8(sp)
-       ldq     a5,5*8(sp)
-       ldt     $f16,6*8(sp)
-       ldt     $f17,7*8(sp)
-       ldt     $f18,8*8(sp)
-       ldt     $f19,9*8(sp)
-       ldt     $f20,10*8(sp)
-       ldt     $f21,11*8(sp)
+       RESTORE_ARGUMENT_REGISTERS(0) /* restore 6 int/6 float argument registers */
+
        ldq     $28,12*8(sp)          /* load method pointer                      */
        ldq     ra,13*8(sp)           /* load return address                      */
        lda     sp,14*8(sp)           /* deallocate stack area                    */
 
+       beq     v0,L_asm_call_jit_compiler_exception
+
        ldl     t8,-8(ra)             /* load instruction LDQ PV,xxx($yy)         */
        sll     t8,48,t8
        sra     t8,48,t8              /* isolate offset                           */
@@ -459,240 +371,27 @@ noregchange:
        call_pal PAL_imb              /* synchronise instruction cache            */
 
        mov     v0,pv                 /* load method address into pv              */
-
        jmp     zero,(pv)             /* and call method. The method returns      */
                                      /* directly to the caller (ra).             */
 
-       .end    asm_call_jit_compiler
-
+L_asm_call_jit_compiler_exception:
+       subq    sp,1*8,sp
+       stq     ra,0*8(sp)
 
-/**************** function asm_refillin_and_handle_exception *******************
-*                                                                              *
-*   This function handles an exception. It does not use the usual calling      *
-*   conventions. The exception is passed in REG_ITMP1 and the                  *
-*   pc from the exception raising position is passed in REG_ITMP2.             *
-*   a0 contains the PV of the function causing the problem                     *
-*                                                                              *
-*   void asm_handle_arithmetic_exception (exceptionclass, exceptionpc);        *
-*                                                                              *
-*******************************************************************************/
-       .ent asm_refillin_and_handle_exception
-asm_refillin_and_handle_exception:
-       ldgp    gp,0(pv)
-        ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
-        sll     t0,48,t0
-        sra     t0,48,t0              /* isolate offset                           */
-        addq    t0,ra,pv              /* compute update address                   */
-        ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-        srl     t0,16,t0              /* isolate instruction code                 */
-        lda     t0,-0x177b(t0)        /* test for LDAH                            */
-        bne     t0, asm_refillin_and_handle_exception_cont
-        ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-        sll     t0,16,t0              /* compute high offset                      */
-        addl    t0,0,t0               /* sign extend high offset                  */
-        addq    t0,pv,pv              /* compute update address                   */
-
-asm_refillin_and_handle_exception_cont:
-
-       mov     sp,t0
-       lda     sp,-6*8(sp) /* prepare stackframe*/
-       stq     pv,5*8(sp) /* store pv of caller */
-       stq     xptr,4*8(sp) /*exception ptr*/
-       stq     xpc,3*8(sp) /*address of failure*/
-       stq     t0,2*8(sp) /*begin of java stack frame*/
-       stq     pv,1*8(sp) /* store pv of caller */
-       stq     zero,0*8(sp)    /*builtin (invisible) function */
-       jsr     ra,asm_prepare_native_stackinfo /* puts 2 additional quadwords on stack */
-       ldgp    gp,0(ra)
-
-       ldq     a2,utf_fillInStackTrace_desc
-       ldq     a1,utf_fillInStackTrace_name
-       ldq     t0,6*8(sp)
-       ldq     t1,offobjvftbl(t0)      
-       ldq     a0,offclass(t1)
-       jsr     ra,class_resolvemethod
-       ldgp    gp,0(ra)
-       /* now we have the method */
-
-       /*refillin */
-       mov     v0,a0
-       ldq     a1,6*8(sp)
-       jsr     ra,asm_calljavafunction
-       ldgp    gp,0(ra)
-
-       /*remove frame*/
-       jsr ra,asm_remove_native_stackinfo
-       ldgp    gp,0(ra)
-
-
-       /*finish*/
-       ldq     xpc,0(sp)       
-       ldq     xptr,1*8(sp)
-        ldq    pv,2*8(sp)
-       lda sp,3*8(sp)
-       br asm_handle_exception
-
-       .end asm_refillin_and_handle_exception
-
-/****** function asm_throw_and_handle_arrayindexoutofbounds_exception **********
-*                                                                              *
-*   This function handles an exception. It does not use the usual calling      *
-*   conventions. The integer parameter is passed in REG_ITMP1 and the          *
-*   pc from the exception raising position is passed in REG_ITMP2.             *
-*                                                                              *
-*   void asm_handle_arithmetic_exception (exceptionclass, exceptionpc);        *
-*                                                                              *
-*******************************************************************************/
-
-       .ent asm_throw_and_handle_arrayindexoutofbounds_exception
-
-asm_throw_and_handle_arrayindexoutofbounds_exception:
-       ldgp    gp,0(pv)
-
-       ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
-       sll     t0,48,t0
-       sra     t0,48,t0              /* isolate offset                           */
-       addq    t0,ra,pv              /* compute update address                   */
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       srl     t0,16,t0              /* isolate instruction code                 */
-       lda     t0,-0x177b(t0)        /* test for LDAH                            */
-       bne     t0,asm_throw_and_handle_arrayindexoutofbounds_exception_cont
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       sll     t0,16,t0              /* compute high offset                      */
-       addl    t0,0,t0               /* sign extend high offset                  */
-       addq    t0,pv,pv              /* compute update address                   */
-
-asm_throw_and_handle_arrayindexoutofbounds_exception_cont:
-       mov     sp,t0
-       lda     sp,-6*8(sp) /*prepare stackframe*/
-       stq     pv,5*8(sp)  /*pv of failure*/
-       stq     itmp1,4*8(sp) /*int parameter  of the exception*/
-       stq     xpc,3*8(sp) /*address of failure */
-       stq     t0,2*8(sp) /*store begin of java stack frame*/
-       stq     pv,1*8(sp) /*store pv of caller in structure*/
-       stq     zero,0*8(sp) /*builtin (invisible function)*/
-
-       jsr     ra,asm_prepare_native_stackinfo /* puts 2 additional quadwords on stack */
-       ldgp    gp,0(ra)
-
-       ldq     a0,6*8(sp)  /*int  of exception*/
-       jsr     ra,new_arrayindexoutofboundsexception
-       ldgp    gp,0(ra)
-
-       mov     v0,itmp1 /*itmp1 is not touched in asm_remove_native_stackinfo*/
-
-       jsr     ra,asm_remove_native_stackinfo
-       ldgp    gp,0(ra)
-
-       ldq     itmp2,0(sp)     
-       ldq     pv,2*8(sp)
-       lda     sp,3*8(sp)
-       br      asm_handle_exception
-
-       .end asm_throw_and_handle_arrayindexoutofbounds_exception
-
-
-/* asm_throw_and_handle_arithmetic_exception ***********************************
-
-   DOCUMENT ME!
-
-*******************************************************************************/
-
-       .ent asm_throw_and_handle_arithmetic_exception
-
-asm_throw_and_handle_arithmetic_exception:
-       ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
-       sll     t0,48,t0
-       sra     t0,48,t0              /* isolate offset                           */
-       addq    t0,ra,pv              /* compute update address                   */
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       srl     t0,16,t0              /* isolate instruction code                 */
-       lda     t0,-0x177b(t0)        /* test for LDAH                            */
-       bne     t0,asm_throw_and_handle_arithmetic_exception_cont
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       sll     t0,16,t0              /* compute high offset                      */
-       addl    t0,0,t0               /* sign extend high offset                  */
-       addq    t0,pv,pv              /* compute update address                   */
-
-asm_throw_and_handle_arithmetic_exception_cont:
-       mov     sp,t0
-       lda     sp,-6*8(sp) /*prepare stackframe*/
-        stq     pv,5*8(sp)  /*pv of failure*/
-       stq     itmp1,4*8(sp) /*exception string of the exception*/
-       stq     xpc,3*8(sp) /*address of failure */
-       stq     t0,2*8(sp) /*store begin of java stack frame*/
-       stq     pv,1*8(sp) /*store pv of caller in structure*/
-       stq     zero,0*8(sp) /*builtin (invisible function)*/
-       jsr     ra,asm_prepare_native_stackinfo /* puts 2 additional quadwords on stack */
-       ldgp    gp,0(ra)
-
-       jsr     ra,new_arithmeticexception
-       ldgp    gp,0(ra)
-       mov     v0,itmp1 /*itmp1 is not touched in asm_remove_native_stackinfo*/
-
-       jsr ra,asm_remove_native_stackinfo
-       ldgp    gp,0(ra)
-
-       ldq itmp2,0(sp) 
-        ldq    pv,2*8(sp)
-       lda sp,3*8(sp)
-       br asm_handle_exception
-
-       .end asm_throw_and_handle_arithmetic_exception
-
-
-/**************** function asm_throw_and_handle_exception **********************
-*                                                                              *
-*   This function handles an exception. It does not use the usual calling      *
-*   conventions. The exception class name is passed in REG_ITMP1 and the       *
-*   pc from the exception raising position is passed in REG_ITMP2.             *
-*                                                                              *
-*   void asm_handle_exception (exceptionclass, exceptionpc);                   *
-*                                                                              *
-*******************************************************************************/
-       .ent asm_throw_and_handle_nat_exception
-asm_throw_and_handle_nat_exception:
-       ldgp    gp,0(pv)
-       ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
-       sll     t0,48,t0
-       sra     t0,48,t0              /* isolate offset                           */
-       addq    t0,ra,pv              /* compute update address                   */
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       srl     t0,16,t0              /* isolate instruction code                 */
-       lda     t0,-0x177b(t0)        /* test for LDAH                            */
-       bne     t0,asm_throw_and_handle_exception
-       ldl     t0,4(ra)              /* load instruction LDAH PV,xxx(PV)         */
-       sll     t0,16,t0              /* compute high offset                      */
-       addl    t0,0,t0               /* sign extend high offset                  */
-       addq    t0,pv,pv              /* compute update address                   */
-
-       .aent asm_throw_and_handle_exception
-asm_throw_and_handle_exception:
-       mov     sp,t0
-       lda     sp,-6*8(sp) /*prepare stackframe*/
-        stq     pv,5*8(sp)  /*pv of failure*/
-       stq     itmp1,4*8(sp) /*classname of the exception*/
-       stq     xpc,3*8(sp) /*address of failure */
-       stq     t0,2*8(sp) /*store begin of java stack frame*/
-       stq     pv,1*8(sp) /*store pv of caller in structure*/
-       stq     zero,0*8(sp) /*builtin (invisible function)*/
-       jsr     ra,asm_prepare_native_stackinfo /* puts 2 additional quadwords on stack */
-       ldgp    gp,0(ra)
-
-       ldq a0,6*8(sp)  /*classname of exception*/
-       jsr ra,new_exception
-       ldgp    gp,0(ra)
+       mov     zero,a0               /* fill in the correct stacktrace           */
+       lda     a1,1*8(sp)            /* pass sp of parent Java function          */
+       mov     ra,a2                 /* pass ra to parent Java function          */
+       mov     ra,a3                 /* xpc is the same as ra                    */
+       jsr     ra,stacktrace_extern_fillInStackTrace
+       mov     v0,xptr
 
-       mov v0,itmp1 /*itmp1 is not touched in asm_remove_native_stackinfo*/
+       ldq     ra,0*8(sp)
+       addq    sp,1*8,sp
 
-       jsr ra,asm_remove_native_stackinfo
-       ldgp    gp,0(ra)
+       subq    ra,4,xpc
+       br      asm_handle_nat_exception
 
-       ldq itmp2,0(sp) 
-        ldq    pv,2*8(sp)
-       lda sp,3*8(sp)
-       br asm_handle_exception
-       .end asm_throw_and_handle_nat_exception
+       .end    asm_call_jit_compiler
 
 
 /********************* function asm_handle_exception ***************************
@@ -708,6 +407,7 @@ asm_throw_and_handle_exception:
 *******************************************************************************/
 
        .ent    asm_handle_nat_exception
+
 asm_handle_nat_exception:
        ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
        sll     t0,48,t0
@@ -723,6 +423,7 @@ asm_handle_nat_exception:
        addq    t0,pv,pv              /* compute update address                   */
 
        .aent    asm_handle_exception
+
 asm_handle_exception:
        lda     sp,-18*8(sp)          /* allocate stack                           */
        stq     t0,0*8(sp)            /* save possible used registers             */
@@ -804,7 +505,7 @@ ex_table_loop:
        br      ra,L_class_load_ra    /* set ra for gp loading                    */
 L_class_load_ra:
        ldgp    gp,0(ra)              /* load gp                                  */
-       jsr     ra,class_load         /* class_load(exceptionclass)               */
+       jsr     ra,load_class_bootstrap
 
        ldq     t0,0*8(sp)            /* restore used register                    */
        ldq     t1,1*8(sp)
@@ -835,7 +536,7 @@ L_class_loaded:
        br      ra,L_class_link_ra    /* set ra for gp loading                    */
 L_class_link_ra:
        ldgp    gp,0(ra)              /* load gp                                  */
-       jsr     ra,class_link         /* class_load(exceptionclass)               */
+       jsr     ra,link_class
 
        ldq     t0,0*8(sp)            /* restore used register                    */
        ldq     t1,1*8(sp)
@@ -900,6 +601,8 @@ empty_table:
 ex_already_cleared:
        ldl     t0,IsSync(pv)         /* t0 = SyncOffset                          */
        beq     t0,no_monitor_exit    /* if zero no monitorexit                   */
+
+#if defined(USE_THREADS)
        addq    sp,t0,t0              /* add stackptr to Offset                   */
        ldq     a0,-8(t0)             /* load monitorexit pointer                 */
 
@@ -925,6 +628,7 @@ ex_mon_load:
        ldq     pv,5*8(sp)
        ldq     ra,6*8(sp)
        lda     sp,7*8(sp)            /* deallocate stack                         */
+#endif
 
 no_monitor_exit:
        ldl     t0,FrameSize(pv)      /* t0 = frame size                          */
@@ -960,14 +664,14 @@ ex_flt1:
        negl    t1,t1                 /* negate register count                    */
        s4addq  t1,t2,t2              /* t2 = ex_flt_sav - 4 * register count     */
        jmp     zero,(t2)             /* jump to save position                    */
-       ldt     $f2,-64(t0)
-       ldt     $f3,-56(t0)
-       ldt     $f4,-48(t0)
-       ldt     $f5,-40(t0)
-       ldt     $f6,-32(t0)
-       ldt     $f7,-24(t0)
-       ldt     $f8,-16(t0)
-       ldt     $f9,-8(t0)
+       ldt     fs0,-64(t0)
+       ldt     fs1,-56(t0)
+       ldt     fs2,-48(t0)
+       ldt     fs3,-40(t0)
+       ldt     fs4,-32(t0)
+       ldt     fs5,-24(t0)
+       ldt     fs6,-16(t0)
+       ldt     fs7,-8(t0)
 ex_flt2:
        ldl     t0,0(ra)              /* load instruction LDA PV,xxx(RA)          */
        sll     t0,48,t0
@@ -986,371 +690,99 @@ ex_flt2:
        .end    asm_handle_nat_exception
 
 
-/* asm_check_clinit ************************************************************
-
-   DOCUMENT ME!!!
+/* asm_wrapper_patcher *********************************************************
 
-   Arguments:
-
-       itmp1: pointer to class
+   XXX
 
    Stack layout:
+        32   return address into JIT code (patch position)
+     24   pointer to virtual java_objectheader
+     16   machine code (which is patched back later)
+      8   unresolved class/method/field reference
+      0   patcher function pointer to call (pv afterwards)
 
-       0   mcode  ; machine code to patch back in
+   ATTENTION: itmp3 == gp! But we don't need gp do call the patcher function.
 
 *******************************************************************************/
                
-    .ent    asm_check_clinit
+       .ent    asm_wrapper_patcher
 
-asm_check_clinit:
-       ldgp    gp,0(itmp2)           /* function is called via `jsr ra,itmp1'    */
+asm_wrapper_patcher:
+       lda     sp,-((12+27+4)*8+sizestackframeinfo)(sp) /* create stack frame    */
 
-       subq    sp,8*8,sp
+       SAVE_ARGUMENT_REGISTERS(0)    /* save 6 int/6 float argument registers    */
+       SAVE_TEMPORARY_REGISTERS(12)  /* save 11 int/16 float temporary registers */
 
-       stq             ra,0*8(sp)            /* save return address                      */
-       stq     pv,1*8(sp)            /* save pv of calling java function         */
-       stq             a0,2*8(sp)            /* save argument registers for leaf         */
-       stq             a1,3*8(sp)            /* functions and native stub                */
-       stq             a2,4*8(sp)
-       stq             a3,5*8(sp)
-       stq             a4,6*8(sp)
-       stq             a5,7*8(sp)
-               
-       ldl             itmp2,offclassinit(itmp1)
-       bne             itmp2,L_is_initialized
-       
-       mov             itmp1,a0              /* move class pointer to a0                 */
-       jsr             ra,class_init
-    ldgp    gp,0(ra)
-               
-       beq     v0,L_initializererror
+       stq     itmp1,(12+27+0)*8(sp) /* save itmp1                               */
+       stq     itmp2,(12+27+1)*8(sp) /* save itmp2                               */
+       stq     ra,(12+27+2)*8(sp)    /* save method return address (for leafs)   */
+       stq     pv,(12+27+3)*8(sp)    /* save pv of calling java function         */
 
-L_is_initialized:
-       ldq     ra,0*8(sp)            /* get return address                       */
-       subq    ra,1*4,ra             /* go back 1 instruction                    */
-       ldl     itmp1,8*8(sp)         /* load machine code from stack             */
-       stl     itmp1,0(ra)           /* store the machine code                   */
+       br      ra,L_asm_wrapper_patcher_load_gp
+L_asm_wrapper_patcher_load_gp:
+       ldgp    gp,0(ra)              /* load gp (it's not set correctly in jit)  */
 
-       call_pal PAL_imb              /* synchronise instruction cache            */
+       lda     a0,(12+27+4)*8(sp)    /* create stackframe info                   */
+       mov     pv,a1                 /* pass java pv                             */
+       lda     a2,((5+12+27+4)*8+sizestackframeinfo)(sp) /* pass java sp         */
+       ldq     a3,(12+27+2)*8(sp)    /* this is correct for leafs                */
+       ldq     a4,((4+12+27+4)*8+sizestackframeinfo)(sp) /* pass xpc             */
+       jsr     ra,stacktrace_create_extern_stackframeinfo
+       ldgp    gp,0(ra)
+
+       lda     a0,((0+12+27+4)*8+sizestackframeinfo)(sp) /* pass sp              */
+       ldq     pv,((0+12+27+4)*8+sizestackframeinfo)(sp) /* get function pointer */
+       ldq     itmp1,(12+27+3)*8(sp) /* save pv to the position of fp            */
+       stq     itmp1,((0+12+27+4)*8+sizestackframeinfo)(sp)
+       jmp     ra,(pv)               /* call the patcher function                */
+       ldgp    gp,0(ra)
+
+       lda     a0,(12+27+4)*8(sp)    /* remove stackframe info                   */
+       jsr     ra,stacktrace_remove_stackframeinfo
+       ldgp    gp,0(ra)
+
+       RESTORE_ARGUMENT_REGISTERS(0) /* restore 6 int/6 float argument registers */
+       RESTORE_TEMPORARY_REGISTERS(12)/* restore 11 integer temporary registers  */
 
-       ldq             ra,0*8(sp)            /* restore return address                   */
-       ldq     pv,1*8(sp)            /* restore pv of calling java function      */
-       ldq             a0,2*8(sp)            /* restore argument registers               */
-       ldq             a1,3*8(sp)
-       ldq             a2,4*8(sp)
-       ldq             a3,5*8(sp)
-       ldq             a4,6*8(sp)
-       ldq             a5,7*8(sp)
+       ldq     itmp1,(12+27+0)*8(sp) /* restore itmp1                            */
+       ldq     itmp2,(12+27+1)*8(sp) /* restore itmp2                            */
+       ldq     ra,(12+27+2)*8(sp)    /* restore method return address (for leafs)*/
+       ldq     pv,(12+27+3)*8(sp)    /* restore pv of calling java function      */
 
-       addq    sp,(8+1)*8,sp         /* remove stack frame (+1 for machine code) */
+       ldq     itmp3,((4+12+27+4)*8+sizestackframeinfo)(sp)/* get RA to jit code */
+       lda     sp,((5+12+27+4)*8+sizestackframeinfo)(sp)  /* remove stack frame  */
 
-       subq    ra,1*4,ra             /* go back 1 instruction                    */
-       jmp             zero,(ra)             /* jump to the new code                     */
+       beq     v0,L_asm_wrapper_patcher_exception
+
+       jmp     zero,(itmp3)          /* jump to new patched code                 */
+
+L_asm_wrapper_patcher_exception:
+       mov     itmp3,xpc             /* return address into JIT code is xpc      */
+
+       br      itmp1,L_asm_wrapper_patcher_exception_load_gp
+L_asm_wrapper_patcher_exception_load_gp:
+       ldgp    gp,0(itmp1)           /* itmp3 == gp, load the current gp         */
 
-L_initializererror:
 #if defined(USE_THREADS) && defined(NATIVE_THREADS)
+       subq    sp,3*8,sp
+       stq     xpc,0*8(sp)           /* save return address (xpc)                */
+       stq     ra,1*8(sp)
+       stq     pv,2*8(sp)
        jsr     ra,builtin_asm_get_exceptionptrptr
+       ldq     xpc,0*8(sp)           /* restore return address (xpc)             */
+       ldq     ra,1*8(sp)
+       ldq     pv,2*8(sp)
+       addq    sp,3*8,sp
 #else
        lda     v0,_exceptionptr
 #endif
        ldq     xptr,0(v0)            /* get the exception pointer                */
        stq     zero,0(v0)            /* clear the exception pointer              */
-
-       ldq             ra,0*8(sp)            /* restore return address                   */
-       ldq     pv,1*8(sp)            /* restore pv of calling java function      */
-       ldq             a0,2*8(sp)            /* restore argument registers               */
-       ldq             a1,3*8(sp)
-       ldq             a2,4*8(sp)
-       ldq             a3,5*8(sp)
-       ldq             a4,6*8(sp)
-       ldq             a5,7*8(sp)
-
-       addq    sp,(8+1)*8,sp         /* remove stack frame (+1 for machine code) */
-
-       subq    ra,4,xpc
        br      asm_handle_exception  /* we have the pv of the calling java func. */
 
-       .end    asm_check_clinit
+       .end    asm_wrapper_patcher
 
                
-/********************* function asm_builtin_monitorenter ***********************
-*                                                                              *
-*   Does null check and calls monitorenter or throws an exception              *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_monitorenter
-
-asm_builtin_monitorenter:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_monitorenter
-       beq     a0,nb_monitorenter        /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_monitorenter       */
-
-nb_monitorenter:
-       lda xpc,-4(ra)
-       ldq xptr,string_java_lang_NullPointerException
-       jmp zero,asm_throw_and_handle_nat_exception
-#if 0
-       subq    sp,8,sp
-    stq     ra,0(sp)
-    jsr     ra,new_nullpointerexception
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-    ldq     ra,0(sp)
-       addq    sp,8,sp
-       
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_handle_nat_exception
-#endif
-       .end    asm_builtin_monitorenter
-
-
-/********************* function asm_builtin_monitorexit ************************
-*                                                                              *
-*   Does null check and calls monitorexit or throws an exception               *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_monitorexit
-
-asm_builtin_monitorexit:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_monitorexit
-       beq     a0,nb_monitorexit         /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_monitorexit        */
-
-nb_monitorexit:
-       lda     xpc,-4(ra)
-       ldq     xptr,string_java_lang_NullPointerException
-       jmp     zero,asm_throw_and_handle_nat_exception
-#if 0
-       subq    sp,8,sp
-    stq     ra,0(sp)
-    jsr     ra,new_nullpointerexception
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-    ldq     ra,0(sp)
-       addq    sp,8,sp
-       
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_handle_nat_exception
-#endif
-       .end    asm_builtin_monitorexit
-
-
-/************************ function asm_builtin_idiv ****************************
-*                                                                              *
-*   Does null check and calls idiv or throws an exception                      *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_idiv
-
-asm_builtin_idiv:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_idiv
-       beq     a1,nb_idiv                /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_idiv               */
-
-nb_idiv:
-       ldq     xptr,string_java_lang_ArithmeticException_message
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_throw_and_handle_arithmetic_exception
-
-       .end    asm_builtin_idiv
-
-
-/************************ function asm_builtin_ldiv ****************************
-*                                                                              *
-*   Does null check and calls ldiv or throws an exception                      *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_ldiv
-
-asm_builtin_ldiv:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_ldiv
-       beq     a1,nb_ldiv                /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_ldiv               */
-
-nb_ldiv:
-       ldq     xptr,string_java_lang_ArithmeticException_message
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_throw_and_handle_arithmetic_exception
-
-       .end    asm_builtin_ldiv
-
-
-/************************ function asm_builtin_irem ****************************
-*                                                                              *
-*   Does null check and calls irem or throws an exception                      *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_irem
-
-asm_builtin_irem:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_irem
-       beq     a1,nb_irem                /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_irem               */
-
-nb_irem:
-       ldq     xptr,string_java_lang_ArithmeticException_message
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_throw_and_handle_arithmetic_exception
-
-       .end    asm_builtin_irem
-
-
-/************************ function asm_builtin_lrem ****************************
-*                                                                              *
-*   Does null check and calls lrem or throws an exception                      *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_lrem
-
-asm_builtin_lrem:
-       ldgp    gp,0(pv)
-       lda     pv,builtin_lrem
-       beq     a1,nb_lrem                /* if (null) throw exception            */
-       jmp     zero,(pv)                 /* else call builtin_lrem               */
-
-nb_lrem:
-       ldq     xptr,string_java_lang_ArithmeticException_message
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_throw_and_handle_arithmetic_exception
-
-       .end    asm_builtin_lrem
-
-
-/******************* function asm_builtin_checkarraycast ***********************
-*                                                                              *
-*   Does the cast check and eventually throws an exception                     *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_checkarraycast
-
-asm_builtin_checkarraycast:
-       ldgp    gp,0(pv)
-       lda     sp,-16(sp)                /* allocate stack space                 */
-       stq     ra,0(sp)                  /* save return address                  */
-       stq     a0,8(sp)                  /* save object pointer                  */
-       jsr     ra,builtin_checkarraycast /* builtin_checkarraycast               */
-       ldgp    gp,0(ra)
-       beq     v0,nb_carray_throw        /* if (false) throw exception           */
-       ldq     ra,0(sp)                  /* restore return address               */
-       ldq     v0,8(sp)                  /* return object pointer                */
-       lda     sp,16(sp)                 /* free stack space                     */
-       jmp     zero,(ra)
-
-nb_carray_throw:
-       ldq     ra,0(sp)
-       lda     sp,16(sp)
-       lda     xpc,-4(ra)
-       ldq     xptr,string_java_lang_ClassCastException
-       jmp     zero,asm_throw_and_handle_nat_exception
-#if 0
-       ldq     a0,string_java_lang_ClassCastException
-    jsr     ra,new_exception
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-
-       ldq     ra,0(sp)                  /* restore return address               */
-       lda     sp,16(sp)                 /* free stack space                     */
-       lda     xpc,-4(ra)                /* faulting address is return adress - 4*/
-       br      asm_handle_nat_exception
-#endif
-
-       .end    asm_builtin_checkarraycast
-
-
-/******************* function asm_builtin_aastore ******************************
-*                                                                              *
-*   Does the cast check and eventually throws an exception                     *
-*                                                                              *
-*******************************************************************************/
-
-       .ent    asm_builtin_aastore
-
-asm_builtin_aastore:
-       ldgp    gp,0(pv)
-       beq     a0,nb_aastore_null        /* if null pointer throw exception      */
-       ldl     t0,offarraysize(a0)       /* load size                            */
-       lda     sp,-24(sp)                /* allocate stack space                 */
-       stq     ra,0(sp)                  /* save return address                  */
-       s8addq  a1,a0,t1                  /* add index*8 to arrayref              */
-       cmpult  a1,t0,t0                  /* do bound check                       */
-       beq     t0,nb_aastore_bound       /* if out of bounds throw exception     */
-       mov     a2,a1                     /* object is second argument            */
-       stq     t1,8(sp)                  /* save store position                  */
-       stq     a1,16(sp)                 /* save object                          */
-       jsr     ra,builtin_canstore       /* builtin_canstore(arrayref,object)    */
-       ldgp    gp,0(ra)
-       ldq     ra,0(sp)                  /* restore return address               */
-       ldq     a0,8(sp)                  /* restore store position               */
-       ldq     a1,16(sp)                 /* restore object                       */
-       lda     sp,24(sp)                 /* free stack space                     */
-       beq     v0,nb_aastore_throw       /* if (false) throw exception           */
-       stq     a1,offobjarrdata(a0)      /* store objectptr in array             */
-       jmp     zero,(ra)
-
-nb_aastore_null:
-       ldq     xptr,string_java_lang_NullPointerException
-       mov     ra,xpc
-       jmp     zero,asm_throw_and_handle_nat_exception
-#if 0  
-       subq    sp,8,sp                   /* allocate stack space                 */
-       stq     ra,0(sp)                  /* save return address                  */
-    jsr     ra,new_nullpointerexception
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-       ldq     ra,0(sp)
-       addq    sp,8,sp
-
-       mov     ra,xpc                    /* faulting address is return adress    */
-       br      asm_handle_nat_exception
-#endif
-nb_aastore_bound:
-       ldq     ra,0(sp)
-       lda     sp,24(sp)
-       mov     ra,xpc
-       mov     a1,xptr
-       jmp     zero,asm_throw_and_handle_arrayindexoutofbounds_exception
-#if 0
-       ldq     a0,string_java_lang_ArrayIndexOutOfBoundsException
-    jsr     ra,new_exception_int      /* a1 already contains the index        */
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-
-       ldq     ra,0(sp)                  /* restore return address               */
-       lda     sp,24(sp)                 /* free stack space                     */
-       mov     ra,xpc                    /* faulting address is return adress    */
-       br      asm_handle_nat_exception
-#endif
-nb_aastore_throw:
-       mov     ra,xpc
-       ldq     xptr,string_java_lang_ArrayStoreException
-       jmp     zero,asm_throw_and_handle_nat_exception
-#if 0
-       subq    sp,8,sp                   /* allocate stack space                 */
-       stq     ra,0(sp)                  /* save return address                  */
-    jsr     ra,new_arraystoreexception
-    ldgp    gp,0(ra)
-       mov     v0,xptr
-       ldq     ra,0(sp)
-       addq    sp,8,sp
-
-       mov     ra,xpc                    /* faulting address is return adress    */
-       br      asm_handle_nat_exception
-#endif
-       .end    asm_builtin_aastore
-
-
 /******************* function asm_initialize_thread_stack **********************
 *                                                                              *
 *   initialized a thread stack                                                 *
@@ -1402,14 +834,14 @@ asm_perform_threadswitch:
        stq     s4, 32(sp)
        stq     s5, 40(sp)
        stq     s6, 48(sp)
-       stt     sf0, 56(sp)
-       stt     sf1, 64(sp)
-       stt     sf2, 72(sp)
-       stt     sf3, 80(sp)
-       stt     sf4, 88(sp)
-       stt     sf5, 96(sp)
-       stt     sf6, 104(sp)
-       stt     sf7, 112(sp)
+       stt     fs0, 56(sp)
+       stt     fs1, 64(sp)
+       stt     fs2, 72(sp)
+       stt     fs3, 80(sp)
+       stt     fs4, 88(sp)
+       stt     fs5, 96(sp)
+       stt     fs6, 104(sp)
+       stt     fs7, 112(sp)
        stq     ra, 120(sp)
        stq     sp, 0(a0)
        stq     sp, 0(a2)
@@ -1421,14 +853,14 @@ asm_perform_threadswitch:
        ldq     s4, 32(sp)
        ldq     s5, 40(sp)
        ldq     s6, 48(sp)
-       ldt     sf0, 56(sp)
-       ldt     sf1, 64(sp)
-       ldt     sf2, 72(sp)
-       ldt     sf3, 80(sp)
-       ldt     sf4, 88(sp)
-       ldt     sf5, 96(sp)
-       ldt     sf6, 104(sp)
-       ldt     sf7, 112(sp)
+       ldt     fs0, 56(sp)
+       ldt     fs1, 64(sp)
+       ldt     fs2, 72(sp)
+       ldt     fs3, 80(sp)
+       ldt     fs4, 88(sp)
+       ldt     fs5, 96(sp)
+       ldt     fs6, 104(sp)
+       ldt     fs7, 112(sp)
        ldq     ra, 120(sp)
        mov     ra, pv
        addq    sp, 128, sp
@@ -1501,29 +933,6 @@ asm_criticalsections:
     .quad   0
 
 
-       .ent asm_prepare_native_stackinfo
-asm_prepare_native_stackinfo:
-       lda sp,-24(sp)
-       stq ra,0(sp)
-       jsr ra,builtin_asm_get_stackframeinfo
-       stq v0,16(sp)
-       ldq t0,0(v0)
-       stq t0,8(sp)
-       ldq ra,0(sp)
-       lda sp,8(sp)
-       stq sp,0(v0)
-       ret
-       .end asm_prepare_native_stackinfo
-
-       .end asm_remove_native_stackinfo
-asm_remove_native_stackinfo:
-       ldq t0,0(sp)
-       ldq t1,8(sp)
-       stq t0,0(t1)
-       lda sp,40(sp)
-       ret
-       .end asm_prepare_native_stackinfo
-
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where