52
53 class NativeInstruction VALUE_OBJ_CLASS_SPEC {
54 friend class Relocation;
55 friend bool is_NativeCallTrampolineStub_at(address);
56 public:
57 enum { arm_insn_sz = 4 };
58
59 inline bool is_nop();
60 inline bool is_illegal();
61 inline bool is_return();
62 inline bool is_jump_or_nop();
63 inline bool is_cond_jump();
64 bool is_safepoint_poll();
65 bool is_movt();
66 bool is_orr();
67 bool is_sigill_zombie_not_entrant();
68
69 bool is_movt(Register dst, unsigned imm, Assembler::Condition cond = Assembler::C_DFLT);
70 bool is_movw(Register dst, unsigned imm, Assembler::Condition cond = Assembler::C_DFLT);
71 bool is_ldr(Register dst, Address addr, Assembler::Condition cond = Assembler::C_DFLT);
72
73 inline bool is_jump() const;
74 inline bool is_call() const;
75
76 inline bool is_mov_const_reg() const;
77 inline bool is_reg_call() const;
78 inline bool is_imm_call() const;
79 inline bool is_reg_jump() const;
80 inline bool is_imm_jump() const;
81
82 protected:
83 address addr() const { return address(this); }
84 // TODO remove this, every command is 4byte long
85 #if 1
86 address addr_at(int offset) const { return addr() + offset; }
87
88 s_char sbyte_at(int offset) const { return *(s_char*) addr_at(offset); }
89 u_char ubyte_at(int offset) const { return *(u_char*) addr_at(offset); }
90
91 jint int_at(int offset) const { return *(jint*) addr_at(offset); }
|
52
53 class NativeInstruction VALUE_OBJ_CLASS_SPEC {
54 friend class Relocation;
55 friend bool is_NativeCallTrampolineStub_at(address);
56 public:
57 enum { arm_insn_sz = 4 };
58
59 inline bool is_nop();
60 inline bool is_illegal();
61 inline bool is_return();
62 inline bool is_jump_or_nop();
63 inline bool is_cond_jump();
64 bool is_safepoint_poll();
65 bool is_movt();
66 bool is_orr();
67 bool is_sigill_zombie_not_entrant();
68
69 bool is_movt(Register dst, unsigned imm, Assembler::Condition cond = Assembler::C_DFLT);
70 bool is_movw(Register dst, unsigned imm, Assembler::Condition cond = Assembler::C_DFLT);
71 bool is_ldr(Register dst, Address addr, Assembler::Condition cond = Assembler::C_DFLT);
72 bool is_patched_already() const;
73
74 inline bool is_jump() const;
75 inline bool is_call() const;
76
77 inline bool is_mov_const_reg() const;
78 inline bool is_reg_call() const;
79 inline bool is_imm_call() const;
80 inline bool is_reg_jump() const;
81 inline bool is_imm_jump() const;
82
83 protected:
84 address addr() const { return address(this); }
85 // TODO remove this, every command is 4byte long
86 #if 1
87 address addr_at(int offset) const { return addr() + offset; }
88
89 s_char sbyte_at(int offset) const { return *(s_char*) addr_at(offset); }
90 u_char ubyte_at(int offset) const { return *(u_char*) addr_at(offset); }
91
92 jint int_at(int offset) const { return *(jint*) addr_at(offset); }
|