hotspot/src/share/vm/shark/sharkCacheDecache.cpp
changeset 14622 8e94e4186d35
parent 13728 882756847a04
child 33160 c59f1676d27e
equal deleted inserted replaced
14621:fd9265ab0f67 14622:8e94e4186d35
   105 }
   105 }
   106 
   106 
   107 void SharkDecacher::process_method_slot(Value** value, int offset) {
   107 void SharkDecacher::process_method_slot(Value** value, int offset) {
   108   // Decache the method pointer
   108   // Decache the method pointer
   109   write_value_to_frame(
   109   write_value_to_frame(
   110     SharkType::Method*_type(),
   110     SharkType::Method_type(),
   111     *value,
   111     *value,
   112     offset);
   112     offset);
   113 
   113 
   114   oopmap()->set_oop(slot2reg(offset));
       
   115 }
   114 }
   116 
   115 
   117 void SharkDecacher::process_pc_slot(int offset) {
   116 void SharkDecacher::process_pc_slot(int offset) {
   118   // Record the PC
   117   // Record the PC
   119   builder()->CreateStore(
   118   builder()->CreateStore(
   203     *value = read_value_from_frame(SharkType::oop_type(), offset);
   202     *value = read_value_from_frame(SharkType::oop_type(), offset);
   204 }
   203 }
   205 
   204 
   206 void SharkCacher::process_method_slot(Value** value, int offset) {
   205 void SharkCacher::process_method_slot(Value** value, int offset) {
   207   // Cache the method pointer
   206   // Cache the method pointer
   208   *value = read_value_from_frame(SharkType::Method*_type(), offset);
   207   *value = read_value_from_frame(SharkType::Method_type(), offset);
   209 }
   208 }
   210 
   209 
   211 void SharkFunctionEntryCacher::process_method_slot(Value** value, int offset) {
   210 void SharkFunctionEntryCacher::process_method_slot(Value** value, int offset) {
   212   // "Cache" the method pointer
   211   // "Cache" the method pointer
   213   *value = method();
   212   *value = method();
   228       value->zero_checked());
   227       value->zero_checked());
   229   }
   228   }
   230 }
   229 }
   231 
   230 
   232 Value* SharkOSREntryCacher::CreateAddressOfOSRBufEntry(int         offset,
   231 Value* SharkOSREntryCacher::CreateAddressOfOSRBufEntry(int         offset,
   233                                                        const Type* type) {
   232                                                        Type* type) {
   234   Value *result = builder()->CreateStructGEP(osr_buf(), offset);
   233   Value *result = builder()->CreateStructGEP(osr_buf(), offset);
   235   if (type != SharkType::intptr_type())
   234   if (type != SharkType::intptr_type())
   236     result = builder()->CreateBitCast(result, PointerType::getUnqual(type));
   235     result = builder()->CreateBitCast(result, PointerType::getUnqual(type));
   237   return result;
   236   return result;
   238 }
   237 }
   252           SharkType::to_stackType(value->basic_type()))),
   251           SharkType::to_stackType(value->basic_type()))),
   253       value->zero_checked());
   252       value->zero_checked());
   254   }
   253   }
   255 }
   254 }
   256 
   255 
   257 void SharkDecacher::write_value_to_frame(const Type* type,
   256 void SharkDecacher::write_value_to_frame(Type* type,
   258                                          Value*      value,
   257                                          Value*      value,
   259                                          int         offset) {
   258                                          int         offset) {
   260   builder()->CreateStore(value, stack()->slot_addr(offset, type));
   259   builder()->CreateStore(value, stack()->slot_addr(offset, type));
   261 }
   260 }
   262 
   261 
   263 Value* SharkCacher::read_value_from_frame(const Type* type, int offset) {
   262 Value* SharkCacher::read_value_from_frame(Type* type, int offset) {
   264   return builder()->CreateLoad(stack()->slot_addr(offset, type));
   263   return builder()->CreateLoad(stack()->slot_addr(offset, type));
   265 }
   264 }