Use art::MemoryRegion::{Load,Store}Bits more in art::CodeInfo.
Change-Id: Id50fc029e83bf2c16bd991ea82acd3b355c29127
diff --git a/runtime/stack_map.h b/runtime/stack_map.h
index e8769f9..1acc442 100644
--- a/runtime/stack_map.h
+++ b/runtime/stack_map.h
@@ -33,6 +33,11 @@
// Size of Dex virtual registers.
static constexpr size_t kVRegSize = 4;
+// We encode the number of bytes needed for writing a value on 3 bits
+// (i.e. up to 8 values), for values that we know are maximum 32-bit
+// long.
+static constexpr size_t kNumberOfBitForNumberOfBytesForEncoding = 3;
+
class CodeInfo;
class StackMapEncoding;
@@ -991,17 +996,11 @@
}
void SetEncodingAt(size_t bit_offset, size_t number_of_bytes) {
- // We encode the number of bytes needed for writing a value on 3 bits,
- // for values that we know are maximum 32bits.
- region_.StoreBit(bit_offset, (number_of_bytes & 1));
- region_.StoreBit(bit_offset + 1, (number_of_bytes & 2));
- region_.StoreBit(bit_offset + 2, (number_of_bytes & 4));
+ region_.StoreBits(bit_offset, number_of_bytes, kNumberOfBitForNumberOfBytesForEncoding);
}
size_t GetNumberOfBytesForEncoding(size_t bit_offset) const {
- return region_.LoadBit(bit_offset)
- + (region_.LoadBit(bit_offset + 1) << 1)
- + (region_.LoadBit(bit_offset + 2) << 2);
+ return region_.LoadBits(bit_offset, kNumberOfBitForNumberOfBytesForEncoding);
}
bool HasInlineInfo() const {
@@ -1143,10 +1142,14 @@
static constexpr int kHasInlineInfoBitOffset = (kEncodingInfoOffset * kBitsPerByte);
static constexpr int kInlineInfoBitOffset = kHasInlineInfoBitOffset + 1;
- static constexpr int kDexRegisterMapBitOffset = kInlineInfoBitOffset + 3;
- static constexpr int kDexPcBitOffset = kDexRegisterMapBitOffset + 3;
- static constexpr int kNativePcBitOffset = kDexPcBitOffset + 3;
- static constexpr int kRegisterMaskBitOffset = kNativePcBitOffset + 3;
+ static constexpr int kDexRegisterMapBitOffset =
+ kInlineInfoBitOffset + kNumberOfBitForNumberOfBytesForEncoding;
+ static constexpr int kDexPcBitOffset =
+ kDexRegisterMapBitOffset + kNumberOfBitForNumberOfBytesForEncoding;
+ static constexpr int kNativePcBitOffset =
+ kDexPcBitOffset + kNumberOfBitForNumberOfBytesForEncoding;
+ static constexpr int kRegisterMaskBitOffset =
+ kNativePcBitOffset + kNumberOfBitForNumberOfBytesForEncoding;
MemoryRegion GetStackMaps(const StackMapEncoding& encoding) const {
return region_.size() == 0