hotspot/src/cpu/sparc/vm/macroAssembler_sparc.cpp
changeset 46620 750c6edff33b
parent 46596 a7c9706d25a9
child 46625 edefffab74e2
equal deleted inserted replaced
46619:a3919f5e8d2b 46620:750c6edff33b
  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) );