summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Geoffray <ngeoffray@google.com>2015-03-18 10:42:22 +0000
committerNicolas Geoffray <ngeoffray@google.com>2015-03-18 10:43:37 +0000
commitaec8f930571ce10d6ce9a4249c45866a7f213397 (patch)
tree6514b8af90323a20282f3afe78812cce7535c7df
parent696005b00575fa53c91f3baabd4e85d543df4df8 (diff)
downloadart-aec8f930571ce10d6ce9a4249c45866a7f213397.tar.gz
art-aec8f930571ce10d6ce9a4249c45866a7f213397.tar.bz2
art-aec8f930571ce10d6ce9a4249c45866a7f213397.zip
StackMap: Always load and store unalign.
Now that we can have a mix of Quick and Optimized code in an .oat file, a CodeInfo object is not necessarily word aligned. Change-Id: Ic6c5d1a2c6e20363436726a0708b0764b5a76caf
-rw-r--r--compiler/optimizing/stack_map_stream.h4
-rw-r--r--runtime/stack_map.h12
2 files changed, 8 insertions, 8 deletions
diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h
index 63a02862b..e1a5afe0e 100644
--- a/compiler/optimizing/stack_map_stream.h
+++ b/compiler/optimizing/stack_map_stream.h
@@ -105,8 +105,8 @@ class StackMapStream : public ValueObject {
+ ComputeStackMapsSize()
+ ComputeDexRegisterMapsSize()
+ ComputeInlineInfoSize();
- // On ARM, CodeInfo data must be 4-byte aligned.
- return RoundUp(size, kWordAlignment);
+ // Note: use RoundUp to word-size here if you want CodeInfo objects to be word aligned.
+ return size;
}
size_t ComputeStackMaskSize() const {
diff --git a/runtime/stack_map.h b/runtime/stack_map.h
index 0db589f08..961772c97 100644
--- a/runtime/stack_map.h
+++ b/runtime/stack_map.h
@@ -632,27 +632,27 @@ class CodeInfo {
}
uint32_t GetOverallSize() const {
- return region_.Load<uint32_t>(kOverallSizeOffset);
+ return region_.LoadUnaligned<uint32_t>(kOverallSizeOffset);
}
void SetOverallSize(uint32_t size) {
- region_.Store<uint32_t>(kOverallSizeOffset, size);
+ region_.StoreUnaligned<uint32_t>(kOverallSizeOffset, size);
}
uint32_t GetStackMaskSize() const {
- return region_.Load<uint32_t>(kStackMaskSizeOffset);
+ return region_.LoadUnaligned<uint32_t>(kStackMaskSizeOffset);
}
void SetStackMaskSize(uint32_t size) {
- region_.Store<uint32_t>(kStackMaskSizeOffset, size);
+ region_.StoreUnaligned<uint32_t>(kStackMaskSizeOffset, size);
}
size_t GetNumberOfStackMaps() const {
- return region_.Load<uint32_t>(kNumberOfStackMapsOffset);
+ return region_.LoadUnaligned<uint32_t>(kNumberOfStackMapsOffset);
}
void SetNumberOfStackMaps(uint32_t number_of_stack_maps) {
- region_.Store<uint32_t>(kNumberOfStackMapsOffset, number_of_stack_maps);
+ region_.StoreUnaligned<uint32_t>(kNumberOfStackMapsOffset, number_of_stack_maps);
}
// Get the size of one stack map of this CodeInfo object, in bytes.