< prev index next >
src/cpu/aarch64/vm/nativeInst_aarch64.hpp
Print this page
*** 52,66 ****
class NativeInstruction VALUE_OBJ_CLASS_SPEC {
friend class Relocation;
friend bool is_NativeCallTrampolineStub_at(address);
public:
! enum { instruction_size = 4 };
inline bool is_nop();
inline bool is_illegal();
inline bool is_return();
bool is_jump();
inline bool is_jump_or_nop();
inline bool is_cond_jump();
bool is_safepoint_poll();
bool is_movz();
bool is_movk();
--- 52,77 ----
class NativeInstruction VALUE_OBJ_CLASS_SPEC {
friend class Relocation;
friend bool is_NativeCallTrampolineStub_at(address);
public:
! enum {
! instruction_size = 4
! };
!
! 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();
bool is_jump();
+ bool is_general_jump();
inline bool is_jump_or_nop();
inline bool is_cond_jump();
bool is_safepoint_poll();
bool is_movz();
bool is_movk();
*** 339,353 ****
};
// An interface for accessing/manipulating native leal instruction of form:
// leal reg, [reg + offset]
! class NativeLoadAddress: public NativeMovRegMem {
! static const bool has_rex = true;
! static const int rex_size = 1;
! public:
void verify();
void print ();
// unit test stuff
static void test() {}
--- 350,368 ----
};
// An interface for accessing/manipulating native leal instruction of form:
// leal reg, [reg + offset]
! class NativeLoadAddress: public NativeInstruction {
! enum AArch64_specific_constants {
! instruction_size = 4,
! instruction_offset = 0,
! data_offset = 0,
! next_instruction_offset = 4
! };
+ public:
void verify();
void print ();
// unit test stuff
static void test() {}
*** 396,405 ****
--- 411,424 ----
instruction_size = 4 * 4,
instruction_offset = 0,
data_offset = 0,
next_instruction_offset = 4 * 4
};
+
+ address jump_destination() const;
+ void set_jump_destination(address dest);
+
static void insert_unconditional(address code_pos, address entry);
static void replace_mt_safe(address instr_addr, address code_buffer);
static void verify();
};
< prev index next >