- mov %rax,a0 /* exception pointer */
- mov MethodPointer(itmp3),a1 /* method pointer */
- mov xpc,a2 /* exception pc */
- call builtin_trace_exception
-
- mov 2*8(%rsp),itmp3 /* %r11 = data segment pointer */
- mov ExTableSize(itmp3),%rcx /* %rcx = exception table size */
- test %rcx,%rcx /* if empty table skip */
- je empty_table
-
- lea ExTableStart(itmp3),%rdi /* %rdi = start of exception table */
- mov 0*8(%rsp),xptr /* get xptr */
-
-ex_table_loop:
- mov 1*8(%rsp),xpc /* get xpc */
-
- mov ExStartPC(%rdi),%rdx /* %rdx = exception start pc */
- cmp xpc,%rdx /* %rdx = (startpc <= xpc) */
- jg ex_table_cont /* if (false) continue */
- mov ExEndPC(%rdi),%rdx /* %rdx = exception end pc */
- cmp %rdx,xpc /* %rdx = (xpc < endpc) */
- jge ex_table_cont /* if (false) continue */
- mov ExCatchType(%rdi),%rdx /* %rdx = exception catch type */
- test %rdx,%rdx /* NULL catches everything */
- je ex_handle_it
-
- cmpl $0,offclassloaded(%rdx) /* check if class is loaded */
- jne L_class_loaded
-
- sub $(4*8),%rsp
- mov %rax,0*8(%rsp)
- mov %rcx,1*8(%rsp)
- mov %rdx,2*8(%rsp)
- mov %rdi,3*8(%rsp)
-
- mov %rdx,%rdi
- call load_class_bootstrap
-
- mov 0*8(%rsp),%rax
- mov 1*8(%rsp),%rcx
- mov 2*8(%rsp),%rdx
- mov 3*8(%rsp),%rdi
- add $(4*8),%rsp
+ mov 0*8(sp),a0 /* pass exception pointer */
+ mov 1*8(sp),a1 /* pass exception pc */
+ mov 2*8(sp),a2 /* pass data segment pointer */
+ call exceptions_handle_exception