1065 default: ShouldNotReachHere(); |
1065 default: ShouldNotReachHere(); |
1066 } |
1066 } |
1067 |
1067 |
1068 __ verify_not_null_oop(Oexception); |
1068 __ verify_not_null_oop(Oexception); |
1069 |
1069 |
|
1070 #ifdef ASSERT |
|
1071 // check that fields in JavaThread for exception oop and issuing pc are |
|
1072 // empty before writing to them |
|
1073 Label oop_empty; |
|
1074 Register scratch = I7; // We can use I7 here because it's overwritten later anyway. |
|
1075 __ ld_ptr(Address(G2_thread, JavaThread::exception_oop_offset()), scratch); |
|
1076 __ br_null(scratch, false, Assembler::pt, oop_empty); |
|
1077 __ delayed()->nop(); |
|
1078 __ stop("exception oop already set"); |
|
1079 __ bind(oop_empty); |
|
1080 |
|
1081 Label pc_empty; |
|
1082 __ ld_ptr(Address(G2_thread, JavaThread::exception_pc_offset()), scratch); |
|
1083 __ br_null(scratch, false, Assembler::pt, pc_empty); |
|
1084 __ delayed()->nop(); |
|
1085 __ stop("exception pc already set"); |
|
1086 __ bind(pc_empty); |
|
1087 #endif |
|
1088 |
1070 // save the exception and issuing pc in the thread |
1089 // save the exception and issuing pc in the thread |
1071 __ st_ptr(Oexception, G2_thread, in_bytes(JavaThread::exception_oop_offset())); |
1090 __ st_ptr(Oexception, G2_thread, in_bytes(JavaThread::exception_oop_offset())); |
1072 __ st_ptr(Oissuing_pc, G2_thread, in_bytes(JavaThread::exception_pc_offset())); |
1091 __ st_ptr(Oissuing_pc, G2_thread, in_bytes(JavaThread::exception_pc_offset())); |
1073 |
1092 |
1074 // use the throwing pc as the return address to lookup (has bci & oop map) |
1093 // use the throwing pc as the return address to lookup (has bci & oop map) |