Add vregs to ShadowFrame.
Change-Id: I870ab3c19c0e727f0e67b570eb55d45c3497d2ad
diff --git a/src/stack.h b/src/stack.h
index bceadc3..845b840 100644
--- a/src/stack.h
+++ b/src/stack.h
@@ -37,16 +37,18 @@
class ShadowFrame {
public:
- // Number of references contained within this shadow frame
uint32_t NumberOfReferences() const {
return number_of_references_;
}
- void SetNumberOfReferences(uint32_t number_of_references) {
+ void SetNumberOfReferences(uint16_t number_of_references) {
number_of_references_ = number_of_references;
}
- // Caller dex pc
+ void SetNumberOfVRegs(uint16_t number_of_vregs) {
+ number_of_vregs_ = number_of_vregs;
+ }
+
uint32_t GetDexPC() const {
return dex_pc_;
}
@@ -55,7 +57,6 @@
dex_pc_ = dex_pc;
}
- // Link to previous shadow frame or NULL
ShadowFrame* GetLink() const {
return link_;
}
@@ -101,37 +102,42 @@
}
}
- // Offset of link within shadow frame
static size_t LinkOffset() {
return OFFSETOF_MEMBER(ShadowFrame, link_);
}
- // Offset of method within shadow frame
static size_t MethodOffset() {
return OFFSETOF_MEMBER(ShadowFrame, method_);
}
- // Offset of dex pc within shadow frame
static size_t DexPCOffset() {
return OFFSETOF_MEMBER(ShadowFrame, dex_pc_);
}
- // Offset of length within shadow frame
static size_t NumberOfReferencesOffset() {
return OFFSETOF_MEMBER(ShadowFrame, number_of_references_);
}
- // Offset of references within shadow frame
+ static size_t NumberOfVRegsOffset() {
+ return OFFSETOF_MEMBER(ShadowFrame, number_of_vregs_);
+ }
+
static size_t ReferencesOffset() {
return OFFSETOF_MEMBER(ShadowFrame, references_);
}
+ size_t VRegsOffset() {
+ return ReferencesOffset() + (sizeof(Object*) * NumberOfReferences());
+ }
+
private:
// ShadowFrame should be allocated by the generated code directly.
// We should not create new shadow stack in the runtime support function.
~ShadowFrame() {}
- uint32_t number_of_references_;
+ uint16_t number_of_references_;
+ uint16_t number_of_vregs_;
+ // Link to previous shadow frame or NULL.
ShadowFrame* link_;
AbstractMethod* method_;
uint32_t dex_pc_;