summaryrefslogtreecommitdiff
path: root/compiler/optimizing
diff options
context:
space:
mode:
author David Srbecky <dsrbecky@google.com> 2018-07-30 16:46:53 +0100
committer David Srbecky <dsrbecky@google.com> 2018-08-02 11:31:44 +0100
commit3aaaa21055ab73562b8da7968ac4fa5fe9d44695 (patch)
treea3118eee8f5cc9c661e1480f2ce73691c3786f8a /compiler/optimizing
parent605339045d347074b9149c0185fe2ca7fafe470d (diff)
Encode frame info using varints.
This saves 0.3% of oat file size. Test: test-art-host-gtest-stack_map_test Change-Id: I85003946a9579f03cb1ed2b5e9b2c62b3efe6734
Diffstat (limited to 'compiler/optimizing')
-rw-r--r--compiler/optimizing/stack_map_stream.cc15
-rw-r--r--compiler/optimizing/stack_map_stream.h2
2 files changed, 9 insertions, 8 deletions
diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc
index 429054cec7..b26b53fc9f 100644
--- a/compiler/optimizing/stack_map_stream.cc
+++ b/compiler/optimizing/stack_map_stream.cc
@@ -45,9 +45,10 @@ void StackMapStream::BeginMethod(size_t frame_size_in_bytes,
uint32_t num_dex_registers) {
DCHECK(!in_method_) << "Mismatched Begin/End calls";
in_method_ = true;
- DCHECK_EQ(frame_size_in_bytes_, 0u) << "BeginMethod was already called";
+ DCHECK_EQ(packed_frame_size_, 0u) << "BeginMethod was already called";
- frame_size_in_bytes_ = frame_size_in_bytes;
+ DCHECK_ALIGNED(frame_size_in_bytes, kStackAlignment);
+ packed_frame_size_ = frame_size_in_bytes / kStackAlignment;
core_spill_mask_ = core_spill_mask;
fp_spill_mask_ = fp_spill_mask;
num_dex_registers_ = num_dex_registers;
@@ -292,11 +293,11 @@ size_t StackMapStream::PrepareForFillIn() {
}
}
- EncodeUnsignedLeb128(&out_, frame_size_in_bytes_);
- EncodeUnsignedLeb128(&out_, core_spill_mask_);
- EncodeUnsignedLeb128(&out_, fp_spill_mask_);
- EncodeUnsignedLeb128(&out_, num_dex_registers_);
- BitMemoryWriter<ScopedArenaVector<uint8_t>> out(&out_, out_.size() * kBitsPerByte);
+ BitMemoryWriter<ScopedArenaVector<uint8_t>> out(&out_);
+ EncodeVarintBits(out, packed_frame_size_);
+ EncodeVarintBits(out, core_spill_mask_);
+ EncodeVarintBits(out, fp_spill_mask_);
+ EncodeVarintBits(out, num_dex_registers_);
EncodeTable(out, stack_maps_);
EncodeTable(out, inline_infos_);
EncodeTable(out, method_infos_);
diff --git a/compiler/optimizing/stack_map_stream.h b/compiler/optimizing/stack_map_stream.h
index de79f4921e..a5f7ff3a49 100644
--- a/compiler/optimizing/stack_map_stream.h
+++ b/compiler/optimizing/stack_map_stream.h
@@ -98,7 +98,7 @@ class StackMapStream : public ValueObject {
void CreateDexRegisterMap();
const InstructionSet instruction_set_;
- uint32_t frame_size_in_bytes_ = 0;
+ uint32_t packed_frame_size_ = 0;
uint32_t core_spill_mask_ = 0;
uint32_t fp_spill_mask_ = 0;
uint32_t num_dex_registers_ = 0;