< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page




5129 
5130 
5131 RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr,
5132                                                       Register tmp,
5133                                                       int offset) {
5134   intptr_t value = *delayed_value_addr;
5135   if (value != 0)
5136     return RegisterOrConstant(value + offset);
5137 
5138   // load indirectly to solve generation ordering problem
5139   movptr(tmp, ExternalAddress((address) delayed_value_addr));
5140 
5141 #ifdef ASSERT
5142   { Label L;
5143     testptr(tmp, tmp);
5144     if (WizardMode) {
5145       const char* buf = NULL;
5146       {
5147         ResourceMark rm;
5148         stringStream ss;
5149         ss.print("DelayedValue="INTPTR_FORMAT, delayed_value_addr[1]);
5150         buf = code_string(ss.as_string());
5151       }
5152       jcc(Assembler::notZero, L);
5153       STOP(buf);
5154     } else {
5155       jccb(Assembler::notZero, L);
5156       hlt();
5157     }
5158     bind(L);
5159   }
5160 #endif
5161 
5162   if (offset != 0)
5163     addptr(tmp, offset);
5164 
5165   return RegisterOrConstant(tmp);
5166 }
5167 
5168 
5169 Address MacroAssembler::argument_address(RegisterOrConstant arg_slot,




5129 
5130 
5131 RegisterOrConstant MacroAssembler::delayed_value_impl(intptr_t* delayed_value_addr,
5132                                                       Register tmp,
5133                                                       int offset) {
5134   intptr_t value = *delayed_value_addr;
5135   if (value != 0)
5136     return RegisterOrConstant(value + offset);
5137 
5138   // load indirectly to solve generation ordering problem
5139   movptr(tmp, ExternalAddress((address) delayed_value_addr));
5140 
5141 #ifdef ASSERT
5142   { Label L;
5143     testptr(tmp, tmp);
5144     if (WizardMode) {
5145       const char* buf = NULL;
5146       {
5147         ResourceMark rm;
5148         stringStream ss;
5149         ss.print("DelayedValue=" INTPTR_FORMAT, delayed_value_addr[1]);
5150         buf = code_string(ss.as_string());
5151       }
5152       jcc(Assembler::notZero, L);
5153       STOP(buf);
5154     } else {
5155       jccb(Assembler::notZero, L);
5156       hlt();
5157     }
5158     bind(L);
5159   }
5160 #endif
5161 
5162   if (offset != 0)
5163     addptr(tmp, offset);
5164 
5165   return RegisterOrConstant(tmp);
5166 }
5167 
5168 
5169 Address MacroAssembler::argument_address(RegisterOrConstant arg_slot,


< prev index next >