SAVE_TEMPORARY_REGISTERS(ARG_CNT) /* case this is a leaf method */
mov $((ARG_CNT+TMP_CNT)*8),a3 /* prepare a3 for handle_exception */
SAVE_TEMPORARY_REGISTERS(ARG_CNT) /* case this is a leaf method */
mov $((ARG_CNT+TMP_CNT)*8),a3 /* prepare a3 for handle_exception */
add sp,a3 /* calculate Java sp into a3... */
add $(6*8),a3
mov a3,3*8(sp) /* ...and save it */
add sp,a3 /* calculate Java sp into a3... */
add $(6*8),a3
mov a3,3*8(sp) /* ...and save it */
mov v0,xpc /* move handlerpc into xpc */
mov 0*8(sp),xptr /* restore exception pointer */
mov v0,xpc /* move handlerpc into xpc */
mov 0*8(sp),xptr /* restore exception pointer */
jz L_asm_handle_exception_no_leaf
RESTORE_ARGUMENT_REGISTERS(0) /* if this is a leaf method, we have */
jz L_asm_handle_exception_no_leaf
RESTORE_ARGUMENT_REGISTERS(0) /* if this is a leaf method, we have */
L_asm_handle_exception_not_catched:
mov 0*8(sp),xptr /* restore exception pointer */
mov 2*8(sp),itmp3 /* restore data segment pointer */
L_asm_handle_exception_not_catched:
mov 0*8(sp),xptr /* restore exception pointer */
mov 2*8(sp),itmp3 /* restore data segment pointer */
jz L_asm_handle_exception_no_leaf_stack
add $((ARG_CNT+TMP_CNT)*8),sp /* remove maybe-leaf stackframe */
jz L_asm_handle_exception_no_leaf_stack
add $((ARG_CNT+TMP_CNT)*8),sp /* remove maybe-leaf stackframe */
L_asm_handle_exception_no_leaf_stack:
mov FrameSize(itmp3),itmp2l /* get frame size */
L_asm_handle_exception_no_leaf_stack:
mov FrameSize(itmp3),itmp2l /* get frame size */
- add itmp2,sp /* unwind stack */
- mov sp,itmp2 /* pointer to save area */
+ add sp,itmp2 /* pointer to save area */
/* exception pointer is still set */
pop xpc /* the new xpc is return address */
sub $3,xpc /* subtract 3 bytes for call */
/* exception pointer is still set */
pop xpc /* the new xpc is return address */
sub $3,xpc /* subtract 3 bytes for call */