equal
deleted
inserted
replaced
1086 } |
1086 } |
1087 s->cr(); |
1087 s->cr(); |
1088 } |
1088 } |
1089 |
1089 |
1090 void RegistersForDebugging::save_registers(MacroAssembler* a) { |
1090 void RegistersForDebugging::save_registers(MacroAssembler* a) { |
1091 a->sub(FP, round_to(sizeof(RegistersForDebugging), sizeof(jdouble)) - STACK_BIAS, O0); |
1091 a->sub(FP, align_up(sizeof(RegistersForDebugging), sizeof(jdouble)) - STACK_BIAS, O0); |
1092 a->flushw(); |
1092 a->flushw(); |
1093 int i; |
1093 int i; |
1094 for (i = 0; i < 8; ++i) { |
1094 for (i = 0; i < 8; ++i) { |
1095 a->ld_ptr(as_iRegister(i)->address_in_saved_window().after_save(), L1); a->st_ptr( L1, O0, i_offset(i)); |
1095 a->ld_ptr(as_iRegister(i)->address_in_saved_window().after_save(), L1); a->st_ptr( L1, O0, i_offset(i)); |
1096 a->ld_ptr(as_lRegister(i)->address_in_saved_window().after_save(), L1); a->st_ptr( L1, O0, l_offset(i)); |
1096 a->ld_ptr(as_lRegister(i)->address_in_saved_window().after_save(), L1); a->st_ptr( L1, O0, l_offset(i)); |
1308 bind(fail); |
1308 bind(fail); |
1309 _verify_oop_implicit_branch[2] = pc(); |
1309 _verify_oop_implicit_branch[2] = pc(); |
1310 |
1310 |
1311 wrccr( O5_save_flags ); // Restore CCR's |
1311 wrccr( O5_save_flags ); // Restore CCR's |
1312 |
1312 |
1313 save_frame(::round_to(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1313 save_frame(align_up(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1314 |
1314 |
1315 // stop_subroutine expects message pointer in I1. |
1315 // stop_subroutine expects message pointer in I1. |
1316 mov(I1, O1); |
1316 mov(I1, O1); |
1317 |
1317 |
1318 // Restore prior 64-bit registers |
1318 // Restore prior 64-bit registers |
1337 void MacroAssembler::stop(const char* msg) { |
1337 void MacroAssembler::stop(const char* msg) { |
1338 // save frame first to get O7 for return address |
1338 // save frame first to get O7 for return address |
1339 // add one word to size in case struct is odd number of words long |
1339 // add one word to size in case struct is odd number of words long |
1340 // It must be doubleword-aligned for storing doubles into it. |
1340 // It must be doubleword-aligned for storing doubles into it. |
1341 |
1341 |
1342 save_frame(::round_to(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1342 save_frame(align_up(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1343 |
1343 |
1344 // stop_subroutine expects message pointer in I1. |
1344 // stop_subroutine expects message pointer in I1. |
1345 // Size of set() should stay the same |
1345 // Size of set() should stay the same |
1346 patchable_set((intptr_t)msg, O1); |
1346 patchable_set((intptr_t)msg, O1); |
1347 |
1347 |
1360 // restore(); done in callee to save space! |
1360 // restore(); done in callee to save space! |
1361 } |
1361 } |
1362 |
1362 |
1363 |
1363 |
1364 void MacroAssembler::warn(const char* msg) { |
1364 void MacroAssembler::warn(const char* msg) { |
1365 save_frame(::round_to(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1365 save_frame(align_up(sizeof(RegistersForDebugging) / BytesPerWord, 2)); |
1366 RegistersForDebugging::save_registers(this); |
1366 RegistersForDebugging::save_registers(this); |
1367 mov(O0, L0); |
1367 mov(O0, L0); |
1368 // Size of set() should stay the same |
1368 // Size of set() should stay the same |
1369 patchable_set((intptr_t)msg, O0); |
1369 patchable_set((intptr_t)msg, O0); |
1370 call( CAST_FROM_FN_PTR(address, warning) ); |
1370 call( CAST_FROM_FN_PTR(address, warning) ); |