Added wrapper functions for register acccess in Instruction.
The VRegB and VRegC functions allow uniform
access to the parameter registers, no matter what the
instruction format is.
Change-Id: I3b33358ea0ed071e22bc6d51bd01fce29bbd432c
diff --git a/src/dex_instruction.h b/src/dex_instruction.h
index 8a49216..602667a 100644
--- a/src/dex_instruction.h
+++ b/src/dex_instruction.h
@@ -46,6 +46,7 @@
const uint16_t case_count;
const int32_t first_key;
const int32_t targets[];
+
private:
DISALLOW_COPY_AND_ASSIGN(PackedSwitchPayload);
};
@@ -73,6 +74,7 @@
const uint16_t element_width;
const uint32_t element_count;
const uint8_t data[];
+
private:
DISALLOW_COPY_AND_ASSIGN(ArrayDataPayload);
};
@@ -239,6 +241,7 @@
uint8_t VRegA_51l() const;
// VRegB
+ int32_t VRegB() const;
int4_t VRegB_11n() const;
uint4_t VRegB_12x() const;
uint16_t VRegB_21c() const;
@@ -257,9 +260,10 @@
uint16_t VRegB_32x() const;
uint16_t VRegB_35c() const;
uint16_t VRegB_3rc() const;
- uint64_t VRegB_51l() const; // vB_wide
+ uint64_t VRegB_51l() const; // vB_wide
// VRegC
+ int32_t VRegC() const;
int8_t VRegC_22b() const;
uint16_t VRegC_22c() const;
int16_t VRegC_22s() const;
@@ -322,6 +326,12 @@
return (kInstructionFlags[Opcode()] & kUnconditional) != 0;
}
+ // Returns the branch offset if this instruction is a branch.
+ int32_t GetTargetOffset() const;
+
+ // Returns true if the instruction allows control flow to go to the following instruction.
+ bool CanFlowThrough() const;
+
// Returns true if this instruction is a switch.
bool IsSwitch() const {
return (kInstructionFlags[Opcode()] & kSwitch) != 0;