< prev index next >

src/hotspot/cpu/aarch64/nativeInst_aarch64.hpp

Print this page
rev 48402 : 8193260: AArch64: JVMCI: Implement trampoline calls
Reviewed-by: adinn

*** 59,69 **** juint encoding() const { return uint_at(0); } ! bool is_blr() const { return (encoding() & 0xfffffc1f) == 0xd63f0000; } bool is_adr_aligned() const { return (encoding() & 0xff000000) == 0x10000000; } // adr Xn, <label>, where label is aligned to 4 bytes (address of instruction). inline bool is_nop(); inline bool is_illegal(); inline bool is_return(); --- 59,69 ---- juint encoding() const { return uint_at(0); } ! bool is_blr() const { return (encoding() & 0xff9ffc1f) == 0xd61f0000; } // blr(register) or br(register) bool is_adr_aligned() const { return (encoding() & 0xff000000) == 0x10000000; } // adr Xn, <label>, where label is aligned to 4 bytes (address of instruction). inline bool is_nop(); inline bool is_illegal(); inline bool is_return();
*** 141,163 **** inline NativeInstruction* nativeInstruction_at(uint32_t *address) { return (NativeInstruction*)address; } inline NativeCall* nativeCall_at(address address); ! // The NativeCall is an abstraction for accessing/manipulating native call imm32/rel32off ! // instructions (used to manipulate inline caches, primitive & dll calls, etc.). class NativeCall: public NativeInstruction { public: enum Aarch64_specific_constants { instruction_size = 4, instruction_offset = 0, displacement_offset = 0, return_address_offset = 4 }; - enum { cache_line_size = BytesPerWord }; // conservative estimate! address instruction_address() const { return addr_at(instruction_offset); } address next_instruction_address() const { return addr_at(return_address_offset); } int displacement() const { return (int_at(displacement_offset) << 6) >> 4; } address displacement_address() const { return addr_at(displacement_offset); } address return_address() const { return addr_at(return_address_offset); } --- 141,163 ---- inline NativeInstruction* nativeInstruction_at(uint32_t *address) { return (NativeInstruction*)address; } inline NativeCall* nativeCall_at(address address); ! // The NativeCall is an abstraction for accessing/manipulating native ! // call instructions (used to manipulate inline caches, primitive & ! // DSO calls, etc.). class NativeCall: public NativeInstruction { public: enum Aarch64_specific_constants { instruction_size = 4, instruction_offset = 0, displacement_offset = 0, return_address_offset = 4 }; address instruction_address() const { return addr_at(instruction_offset); } address next_instruction_address() const { return addr_at(return_address_offset); } int displacement() const { return (int_at(displacement_offset) << 6) >> 4; } address displacement_address() const { return addr_at(displacement_offset); } address return_address() const { return addr_at(return_address_offset); }
*** 204,213 **** --- 204,214 ---- // The parameter assert_lock disables the assertion during code generation. void set_destination_mt_safe(address dest, bool assert_lock = true); address get_trampoline(); + address trampoline_jump(CodeBuffer &cbuf, address dest); }; inline NativeCall* nativeCall_at(address address) { NativeCall* call = (NativeCall*)(address - NativeCall::instruction_offset); #ifdef ASSERT
< prev index next >