inline void MacroAssembler::load_const(Register t, const AddressLiteral& a) { assert(t != Z_R0, "R0 not allowed"); // First relocate (we don't change the offset in the RelocationHolder, // just pass a.rspec()), then delegate to load_const(Register, long). relocate(a.rspec()); load_const(t, (long)a.value()); }
// This code sequence is relocatable to any address, even on LP64. inline void MacroAssembler::jumpl_to(const AddressLiteral& addrlit, Register temp, Register d, int offset) { assert_not_delayed(); // Force fixed length sethi because NativeJump and NativeFarCall don't handle // variable length instruction streams. patchable_sethi(addrlit, temp); jmpl(temp, addrlit.low10() + offset, d); }
inline void MacroAssembler::store_ptr_contents(Register s, const AddressLiteral& addrlit, Register temp, int offset) { assert_not_delayed(); if (ForceUnreachable) { patchable_sethi(addrlit, temp); } else { sethi(addrlit, temp); } st_ptr(s, temp, addrlit.low10() + offset); }
inline void MacroAssembler::load_ptr_contents(const AddressLiteral& addrlit, Register d, int offset) { assert_not_delayed(); if (ForceUnreachable) { patchable_sethi(addrlit, d); } else { sethi(addrlit, d); } ld_ptr(d, addrlit.low10() + offset, d); }
inline void MacroAssembler::set_oop(AddressLiteral obj_addr, Register d) { assert(obj_addr.rspec().type() == relocInfo::oop_type, "must be an oop reloc"); load_const(d, obj_addr); }
inline void MacroAssembler::set_oop(const AddressLiteral& obj_addr, Register d) { assert(obj_addr.rspec().type() == relocInfo::oop_type, "must be an oop reloc"); set(obj_addr, d); }
inline void MacroAssembler::set_metadata(const AddressLiteral& obj_addr, Register d) { assert(obj_addr.rspec().type() == relocInfo::metadata_type, "must be a metadata reloc"); set(obj_addr, d); }
inline void MacroAssembler::load_const_optimized(Register t, const AddressLiteral& a) { assert(t != Z_R0, "R0 not allowed"); assert((relocInfo::relocType)a.rspec().reloc()->type() == relocInfo::none, "cannot relocate optimized load_consts"); load_const_optimized(t, a.value()); }