diff options
author | Nicolas Geoffray <ngeoffray@google.com> | 2015-03-18 10:42:22 +0000 |
---|---|---|
committer | Nicolas Geoffray <ngeoffray@google.com> | 2015-03-18 10:43:37 +0000 |
commit | aec8f930571ce10d6ce9a4249c45866a7f213397 (patch) | |
tree | 6514b8af90323a20282f3afe78812cce7535c7df | |
parent | 696005b00575fa53c91f3baabd4e85d543df4df8 (diff) | |
download | art-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.h | 4 | ||||
-rw-r--r-- | runtime/stack_map.h | 12 |
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. |