1396 #else |
1396 #else |
1397 // workaround not needed on !LINUX :-) |
1397 // workaround not needed on !LINUX :-) |
1398 ShouldNotCallThis(); |
1398 ShouldNotCallThis(); |
1399 return NULL; |
1399 return NULL; |
1400 #endif |
1400 #endif |
|
1401 } |
|
1402 |
|
1403 void MacroAssembler::reserved_stack_check(Register return_pc) { |
|
1404 // Test if reserved zone needs to be enabled. |
|
1405 Label no_reserved_zone_enabling; |
|
1406 |
|
1407 ld_ptr(R0, JavaThread::reserved_stack_activation_offset(), R16_thread); |
|
1408 cmpld(CCR0, R1_SP, R0); |
|
1409 blt_predict_taken(CCR0, no_reserved_zone_enabling); |
|
1410 |
|
1411 // Enable reserved zone again, throw stack overflow exception. |
|
1412 push_frame_reg_args(0, R0); |
|
1413 call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::enable_stack_reserved_zone), R16_thread); |
|
1414 pop_frame(); |
|
1415 mtlr(return_pc); |
|
1416 load_const_optimized(R0, StubRoutines::throw_delayed_StackOverflowError_entry()); |
|
1417 mtctr(R0); |
|
1418 bctr(); |
|
1419 |
|
1420 should_not_reach_here(); |
|
1421 |
|
1422 bind(no_reserved_zone_enabling); |
1401 } |
1423 } |
1402 |
1424 |
1403 // CmpxchgX sets condition register to cmpX(current, compare). |
1425 // CmpxchgX sets condition register to cmpX(current, compare). |
1404 void MacroAssembler::cmpxchgw(ConditionRegister flag, Register dest_current_value, |
1426 void MacroAssembler::cmpxchgw(ConditionRegister flag, Register dest_current_value, |
1405 Register compare_value, Register exchange_value, |
1427 Register compare_value, Register exchange_value, |