summaryrefslogtreecommitdiffstats
path: root/runtime/stack.h
diff options
context:
space:
mode:
authorZheng Xu <zheng.xu@arm.com>2014-06-03 16:22:23 +0800
committerZheng Xu <zheng.xu@arm.com>2014-06-04 16:15:10 +0800
commit511c8a653d5896e81428393a1c3d427da64e36f3 (patch)
tree2d286df3b09a689a313bccd8925eb29fc2d1c4eb /runtime/stack.h
parent57795db7d44bcd6d106481fa192691400b2358c8 (diff)
downloadart-511c8a653d5896e81428393a1c3d427da64e36f3.zip
art-511c8a653d5896e81428393a1c3d427da64e36f3.tar.gz
art-511c8a653d5896e81428393a1c3d427da64e36f3.tar.bz2
AArch64: Fix cmp-long and method with long arguments.
1. Fix cmp-long. 2. Use single register to pass long argument. 3. Flush StackReference<ArtMethod> on arm64 the same as in common code. 3. Fix the mismatch in calculate reg offset. Change-Id: Ie2723260fb143512e4da6ee88d4f3aded80d3d5e
Diffstat (limited to 'runtime/stack.h')
-rw-r--r--runtime/stack.h64
1 files changed, 32 insertions, 32 deletions
diff --git a/runtime/stack.h b/runtime/stack.h
index fabdd4f..e1c8c80 100644
--- a/runtime/stack.h
+++ b/runtime/stack.h
@@ -599,37 +599,37 @@ class StackVisitor {
* on location in frame as long as code generator itself knows how
* to access them.
*
- * +------------------------+
- * | IN[ins-1] | {Note: resides in caller's frame}
- * | . |
- * | IN[0] |
- * | caller's Method* |
- * +========================+ {Note: start of callee's frame}
- * | core callee-save spill | {variable sized}
- * +------------------------+
- * | fp callee-save spill |
- * +------------------------+
- * | filler word | {For compatibility, if V[locals-1] used as wide
- * +------------------------+
- * | V[locals-1] |
- * | V[locals-2] |
- * | . |
- * | . | ... (reg == 2)
- * | V[1] | ... (reg == 1)
- * | V[0] | ... (reg == 0) <---- "locals_start"
- * +------------------------+
- * | Compiler temp region | ... (reg <= -3)
- * | |
- * | |
- * +------------------------+
- * | stack alignment padding| {0 to (kStackAlignWords-1) of padding}
- * +------------------------+
- * | OUT[outs-1] |
- * | OUT[outs-2] |
- * | . |
- * | OUT[0] |
- * | curMethod* | ... (reg == -2) <<== sp, 16-byte aligned
- * +========================+
+ * +---------------------------+
+ * | IN[ins-1] | {Note: resides in caller's frame}
+ * | . |
+ * | IN[0] |
+ * | caller's ArtMethod | ... StackReference<ArtMethod>
+ * +===========================+ {Note: start of callee's frame}
+ * | core callee-save spill | {variable sized}
+ * +---------------------------+
+ * | fp callee-save spill |
+ * +---------------------------+
+ * | filler word | {For compatibility, if V[locals-1] used as wide
+ * +---------------------------+
+ * | V[locals-1] |
+ * | V[locals-2] |
+ * | . |
+ * | . | ... (reg == 2)
+ * | V[1] | ... (reg == 1)
+ * | V[0] | ... (reg == 0) <---- "locals_start"
+ * +---------------------------+
+ * | Compiler temp region | ... (reg <= -3)
+ * | |
+ * | |
+ * +---------------------------+
+ * | stack alignment padding | {0 to (kStackAlignWords-1) of padding}
+ * +---------------------------+
+ * | OUT[outs-1] |
+ * | OUT[outs-2] |
+ * | . |
+ * | OUT[0] |
+ * | StackReference<ArtMethod> | ... (reg == -2) <<== sp, 16-byte aligned
+ * +===========================+
*/
static int GetVRegOffset(const DexFile::CodeItem* code_item,
uint32_t core_spills, uint32_t fp_spills,
@@ -661,7 +661,7 @@ class StackVisitor {
return locals_start + (reg * sizeof(uint32_t));
} else {
// Handle ins.
- return frame_size + ((reg - num_regs) * sizeof(uint32_t)) + GetBytesPerGprSpillLocation(isa);
+ return frame_size + ((reg - num_regs) * sizeof(uint32_t)) + sizeof(StackReference<mirror::ArtMethod>);
}
}