diff options
author | 2016-03-31 12:02:28 +0100 | |
---|---|---|
committer | 2016-04-04 17:50:20 +0100 | |
commit | 9d07e3d128ccfa0ef7670feadd424a825e447d1d (patch) | |
tree | dfb677fd75f0f297fef9bc49311cf1d22c770f56 /compiler/gc_map_builder.h | |
parent | eb98c0ded592cfca8187c744393c82efd1020b2a (diff) |
Clean up OatQuickMethodHeader after Quick removal.
This reduces the size of the pre-header by 8 bytes, reducing
oat file size and mmapped .text section size. The memory
needed to store a CompiledMethod by dex2oat is also reduced,
for 32-bit dex2oat by 8B and for 64-bit dex2oat by 16B. The
aosp_flounder-userdebug 32-bit and 64-bit boot.oat are each
about 1.1MiB smaller.
Disable the broken StubTest.IMT, b/27991555 .
Change-Id: I05fe45c28c8ffb7a0fa8b1117b969786748b1039
Diffstat (limited to 'compiler/gc_map_builder.h')
-rw-r--r-- | compiler/gc_map_builder.h | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/compiler/gc_map_builder.h b/compiler/gc_map_builder.h deleted file mode 100644 index 2ef7f1a659..0000000000 --- a/compiler/gc_map_builder.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ART_COMPILER_GC_MAP_BUILDER_H_ -#define ART_COMPILER_GC_MAP_BUILDER_H_ - -#include <vector> - -#include "base/bit_utils.h" -#include "gc_map.h" - -namespace art { - -class GcMapBuilder { - public: - template <typename Vector> - GcMapBuilder(Vector* table, size_t entries, uint32_t max_native_offset, - size_t references_width) - : entries_(entries), references_width_(entries != 0u ? references_width : 0u), - native_offset_width_(entries != 0 && max_native_offset != 0 - ? sizeof(max_native_offset) - CLZ(max_native_offset) / 8u - : 0u), - in_use_(entries) { - static_assert(std::is_same<typename Vector::value_type, uint8_t>::value, "Invalid value type"); - - // Resize table and set up header. - table->resize((EntryWidth() * entries) + sizeof(uint32_t)); - table_ = table->data(); - CHECK_LT(native_offset_width_, 1U << 3); - (*table)[0] = native_offset_width_ & 7; - CHECK_LT(references_width_, 1U << 13); - (*table)[0] |= (references_width_ << 3) & 0xFF; - (*table)[1] = (references_width_ >> 5) & 0xFF; - CHECK_LT(entries, 1U << 16); - (*table)[2] = entries & 0xFF; - (*table)[3] = (entries >> 8) & 0xFF; - } - - void AddEntry(uint32_t native_offset, const uint8_t* references) { - size_t table_index = TableIndex(native_offset); - while (in_use_[table_index]) { - table_index = (table_index + 1) % entries_; - } - in_use_[table_index] = true; - SetCodeOffset(table_index, native_offset); - DCHECK_EQ(native_offset, GetCodeOffset(table_index)); - SetReferences(table_index, references); - } - - private: - size_t TableIndex(uint32_t native_offset) { - return NativePcOffsetToReferenceMap::Hash(native_offset) % entries_; - } - - uint32_t GetCodeOffset(size_t table_index) { - uint32_t native_offset = 0; - size_t table_offset = (table_index * EntryWidth()) + sizeof(uint32_t); - for (size_t i = 0; i < native_offset_width_; i++) { - native_offset |= table_[table_offset + i] << (i * 8); - } - return native_offset; - } - - void SetCodeOffset(size_t table_index, uint32_t native_offset) { - size_t table_offset = (table_index * EntryWidth()) + sizeof(uint32_t); - for (size_t i = 0; i < native_offset_width_; i++) { - table_[table_offset + i] = (native_offset >> (i * 8)) & 0xFF; - } - } - - void SetReferences(size_t table_index, const uint8_t* references) { - size_t table_offset = (table_index * EntryWidth()) + sizeof(uint32_t); - memcpy(&table_[table_offset + native_offset_width_], references, references_width_); - } - - size_t EntryWidth() const { - return native_offset_width_ + references_width_; - } - - // Number of entries in the table. - const size_t entries_; - // Number of bytes used to encode the reference bitmap. - const size_t references_width_; - // Number of bytes used to encode a native offset. - const size_t native_offset_width_; - // Entries that are in use. - std::vector<bool> in_use_; - // The table we're building. - uint8_t* table_; -}; - -} // namespace art - -#endif // ART_COMPILER_GC_MAP_BUILDER_H_ |