Index: src/compiler/instruction.h |
diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h |
index 4ce89ddd97ce193118d9736cfd5058c305e034ef..daa83f29bc55dcad7b9d512911aa8b8a32e7e2fc 100644 |
--- a/src/compiler/instruction.h |
+++ b/src/compiler/instruction.h |
@@ -64,7 +64,7 @@ class InstructionOperand : public ZoneObject { |
void ConvertTo(Kind kind, int index) { |
if (kind == REGISTER || kind == DOUBLE_REGISTER) DCHECK(index >= 0); |
value_ = KindField::encode(kind); |
- value_ |= index << KindField::kSize; |
+ value_ |= bit_cast<unsigned>(index << KindField::kSize); |
DCHECK(this->index() == index); |
} |
@@ -73,9 +73,9 @@ class InstructionOperand : public ZoneObject { |
static void TearDownCaches(); |
protected: |
- typedef BitField<Kind, 0, 3> KindField; |
+ typedef BitField64<Kind, 0, 3> KindField; |
- unsigned value_; |
+ uint64_t value_; |
}; |
typedef ZoneVector<InstructionOperand*> InstructionOperandVector; |
@@ -128,9 +128,8 @@ class UnallocatedOperand : public InstructionOperand { |
DCHECK(policy == FIXED_SLOT); |
value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister); |
value_ |= BasicPolicyField::encode(policy); |
- value_ |= index << FixedSlotIndexField::kShift; |
- // TODO(dcarney): 2^10 is not enough for the fixed slot index. |
- CHECK(this->fixed_slot_index() == index); |
+ value_ |= static_cast<int64_t>(index) << FixedSlotIndexField::kShift; |
+ DCHECK(this->fixed_slot_index() == index); |
} |
UnallocatedOperand(ExtendedPolicy policy, int index) |
@@ -183,22 +182,22 @@ class UnallocatedOperand : public InstructionOperand { |
// +------------------------------------------+ P ... Policy |
// |
// The slot index is a signed value which requires us to decode it manually |
- // instead of using the BitField utility class. |
+ // instead of using the BitField64 utility class. |
// The superclass has a KindField. |
STATIC_ASSERT(KindField::kSize == 3); |
// BitFields for all unallocated operands. |
- class BasicPolicyField : public BitField<BasicPolicy, 3, 1> {}; |
- class VirtualRegisterField : public BitField<unsigned, 4, 18> {}; |
+ class BasicPolicyField : public BitField64<BasicPolicy, 3, 1> {}; |
+ class VirtualRegisterField : public BitField64<unsigned, 4, 30> {}; |
// BitFields specific to BasicPolicy::FIXED_SLOT. |
- class FixedSlotIndexField : public BitField<int, 22, 10> {}; |
+ class FixedSlotIndexField : public BitField64<int, 34, 30> {}; |
// BitFields specific to BasicPolicy::EXTENDED_POLICY. |
- class ExtendedPolicyField : public BitField<ExtendedPolicy, 22, 3> {}; |
- class LifetimeField : public BitField<Lifetime, 25, 1> {}; |
- class FixedRegisterField : public BitField<int, 26, 6> {}; |
+ class ExtendedPolicyField : public BitField64<ExtendedPolicy, 34, 3> {}; |
+ class LifetimeField : public BitField64<Lifetime, 37, 1> {}; |
+ class FixedRegisterField : public BitField64<int, 38, 6> {}; |
static const int kInvalidVirtualRegister = VirtualRegisterField::kMax; |
static const int kMaxVirtualRegisters = VirtualRegisterField::kMax; |
@@ -245,7 +244,8 @@ class UnallocatedOperand : public InstructionOperand { |
// [fixed_slot_index]: Only for FIXED_SLOT. |
int fixed_slot_index() const { |
DCHECK(HasFixedSlotPolicy()); |
- return static_cast<int>(value_) >> FixedSlotIndexField::kShift; |
+ return static_cast<int>(bit_cast<int64_t>(value_) >> |
+ FixedSlotIndexField::kShift); |
} |
// [fixed_register_index]: Only for FIXED_REGISTER or FIXED_DOUBLE_REGISTER. |