src/hotspot/cpu/ppc/c1_LIRAssembler_ppc.cpp
changeset 48332 651a95f30dfb
parent 47698 d4bfafe600d0
child 48856 c866eaca24cb
equal deleted inserted replaced
48331:a8e39cc7b88f 48332:651a95f30dfb
    34 #include "gc/shared/collectedHeap.hpp"
    34 #include "gc/shared/collectedHeap.hpp"
    35 #include "gc/shared/barrierSet.hpp"
    35 #include "gc/shared/barrierSet.hpp"
    36 #include "gc/shared/cardTableModRefBS.hpp"
    36 #include "gc/shared/cardTableModRefBS.hpp"
    37 #include "nativeInst_ppc.hpp"
    37 #include "nativeInst_ppc.hpp"
    38 #include "oops/objArrayKlass.hpp"
    38 #include "oops/objArrayKlass.hpp"
       
    39 #include "runtime/safepointMechanism.inline.hpp"
    39 #include "runtime/sharedRuntime.hpp"
    40 #include "runtime/sharedRuntime.hpp"
    40 
    41 
    41 #define __ _masm->
    42 #define __ _masm->
    42 
    43 
    43 
    44 
  1312     __ addi(R1_SP, R1_SP, frame_size);
  1313     __ addi(R1_SP, R1_SP, frame_size);
  1313   } else {
  1314   } else {
  1314     __ pop_frame();
  1315     __ pop_frame();
  1315   }
  1316   }
  1316 
  1317 
  1317   if (LoadPollAddressFromThread) {
  1318   if (SafepointMechanism::uses_thread_local_poll()) {
  1318     // TODO: PPC port __ ld(polling_page, in_bytes(JavaThread::poll_address_offset()), R16_thread);
  1319     __ ld(polling_page, in_bytes(Thread::polling_page_offset()), R16_thread);
  1319     Unimplemented();
  1320   } else {
  1320   } else {
  1321     __ load_const_optimized(polling_page, (long)(address) os::get_polling_page(), R0);
  1321     __ load_const_optimized(polling_page, (long)(address) os::get_polling_page(), R0); // TODO: PPC port: get_standard_polling_page()
       
  1322   }
  1322   }
  1323 
  1323 
  1324   // Restore return pc relative to callers' sp.
  1324   // Restore return pc relative to callers' sp.
  1325   __ ld(return_pc, _abi(lr), R1_SP);
  1325   __ ld(return_pc, _abi(lr), R1_SP);
  1326   // Move return pc to LR.
  1326   // Move return pc to LR.
  1339   __ blr();
  1339   __ blr();
  1340 }
  1340 }
  1341 
  1341 
  1342 
  1342 
  1343 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
  1343 int LIR_Assembler::safepoint_poll(LIR_Opr tmp, CodeEmitInfo* info) {
  1344 
  1344   const Register poll_addr = tmp->as_register();
  1345   if (LoadPollAddressFromThread) {
  1345   if (SafepointMechanism::uses_thread_local_poll()) {
  1346     const Register poll_addr = tmp->as_register();
  1346     __ ld(poll_addr, in_bytes(Thread::polling_page_offset()), R16_thread);
  1347     // TODO: PPC port __ ld(poll_addr, in_bytes(JavaThread::poll_address_offset()), R16_thread);
  1347   } else {
  1348     Unimplemented();
  1348     __ load_const_optimized(poll_addr, (intptr_t)os::get_polling_page(), R0);
  1349     __ relocate(relocInfo::poll_type); // XXX
  1349   }
  1350     guarantee(info != NULL, "Shouldn't be NULL");
       
  1351     int offset = __ offset();
       
  1352     add_debug_info_for_branch(info);
       
  1353     __ load_from_polling_page(poll_addr);
       
  1354     return offset;
       
  1355   }
       
  1356 
       
  1357   __ load_const_optimized(tmp->as_register(), (intptr_t)os::get_polling_page(), R0); // TODO: PPC port: get_standard_polling_page()
       
  1358   if (info != NULL) {
  1350   if (info != NULL) {
  1359     add_debug_info_for_branch(info);
  1351     add_debug_info_for_branch(info);
  1360   }
  1352   }
  1361   int offset = __ offset();
  1353   int offset = __ offset();
  1362   __ relocate(relocInfo::poll_type);
  1354   __ relocate(relocInfo::poll_type);
  1363   __ load_from_polling_page(tmp->as_register());
  1355   __ load_from_polling_page(poll_addr);
  1364 
  1356 
  1365   return offset;
  1357   return offset;
  1366 }
  1358 }
  1367 
  1359 
  1368 
  1360