src/cpu/x86/vm/macroAssembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/x86/vm

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page




2240 }
2241 
2242 // Wouldn't need if AddressLiteral version had new name
2243 void MacroAssembler::call(Label& L, relocInfo::relocType rtype) {
2244   Assembler::call(L, rtype);
2245 }
2246 
2247 void MacroAssembler::call(Register entry) {
2248   Assembler::call(entry);
2249 }
2250 
2251 void MacroAssembler::call(AddressLiteral entry) {
2252   if (reachable(entry)) {
2253     Assembler::call_literal(entry.target(), entry.rspec());
2254   } else {
2255     lea(rscratch1, entry);
2256     Assembler::call(rscratch1);
2257   }
2258 }
2259 
2260 void MacroAssembler::ic_call(address entry) {
2261   RelocationHolder rh = virtual_call_Relocation::spec(pc());
2262   movptr(rax, (intptr_t)Universe::non_oop_word());
2263   call(AddressLiteral(entry, rh));
2264 }
2265 
2266 // Implementation of call_VM versions
2267 
2268 void MacroAssembler::call_VM(Register oop_result,
2269                              address entry_point,
2270                              bool check_exceptions) {
2271   Label C, E;
2272   call(C, relocInfo::none);
2273   jmp(E);
2274 
2275   bind(C);
2276   call_VM_helper(oop_result, entry_point, 0, check_exceptions);
2277   ret(0);
2278 
2279   bind(E);
2280 }
2281 




2240 }
2241 
2242 // Wouldn't need if AddressLiteral version had new name
2243 void MacroAssembler::call(Label& L, relocInfo::relocType rtype) {
2244   Assembler::call(L, rtype);
2245 }
2246 
2247 void MacroAssembler::call(Register entry) {
2248   Assembler::call(entry);
2249 }
2250 
2251 void MacroAssembler::call(AddressLiteral entry) {
2252   if (reachable(entry)) {
2253     Assembler::call_literal(entry.target(), entry.rspec());
2254   } else {
2255     lea(rscratch1, entry);
2256     Assembler::call(rscratch1);
2257   }
2258 }
2259 
2260 void MacroAssembler::ic_call(address entry, jint method_index) {
2261   RelocationHolder rh = virtual_call_Relocation::spec(pc(), method_index);
2262   movptr(rax, (intptr_t)Universe::non_oop_word());
2263   call(AddressLiteral(entry, rh));
2264 }
2265 
2266 // Implementation of call_VM versions
2267 
2268 void MacroAssembler::call_VM(Register oop_result,
2269                              address entry_point,
2270                              bool check_exceptions) {
2271   Label C, E;
2272   call(C, relocInfo::none);
2273   jmp(E);
2274 
2275   bind(C);
2276   call_VM_helper(oop_result, entry_point, 0, check_exceptions);
2277   ret(0);
2278 
2279   bind(E);
2280 }
2281 


src/cpu/x86/vm/macroAssembler_x86.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File