From 67ba872df798271d2960be27c7f1e813259feabc Mon Sep 17 00:00:00 2001 From: David Srbecky Date: Thu, 23 May 2019 15:32:18 +0100 Subject: Optimize stack map decoding. We usually read several consecutive varints. Add helper method optimized for that use case (ideally reading 8 varints from single load). This improves app startup by 0.4% (maps,speed). PMD on golem seems to get around 5% faster. CodeInfo::Decode on its own is 25% faster. Bug: 133257467 Test: ./art/test.py -b --host --64 Change-Id: Iaf7e8469ed6397b1d1d4102e409b5731f7229557 --- compiler/optimizing/stack_map_stream.cc | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'compiler/optimizing/stack_map_stream.cc') diff --git a/compiler/optimizing/stack_map_stream.cc b/compiler/optimizing/stack_map_stream.cc index 60ca61c133..8c3664312d 100644 --- a/compiler/optimizing/stack_map_stream.cc +++ b/compiler/optimizing/stack_map_stream.cc @@ -52,6 +52,15 @@ void StackMapStream::BeginMethod(size_t frame_size_in_bytes, core_spill_mask_ = core_spill_mask; fp_spill_mask_ = fp_spill_mask; num_dex_registers_ = num_dex_registers; + + if (kVerifyStackMaps) { + dchecks_.emplace_back([=](const CodeInfo& code_info) { + DCHECK_EQ(code_info.packed_frame_size_, frame_size_in_bytes / kStackAlignment); + DCHECK_EQ(code_info.core_spill_mask_, core_spill_mask); + DCHECK_EQ(code_info.fp_spill_mask_, fp_spill_mask); + DCHECK_EQ(code_info.number_of_dex_registers_, num_dex_registers); + }); + } } void StackMapStream::EndMethod() { -- cgit v1.2.3-59-g8ed1b