| Index: src/compiler/instruction.h
|
| diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
|
| index daa83f29bc55dcad7b9d512911aa8b8a32e7e2fc..1729d13c16a06cc6c261732edfb2f79ffcaa7b60 100644
|
| --- a/src/compiler/instruction.h
|
| +++ b/src/compiler/instruction.h
|
| @@ -73,9 +73,9 @@ class InstructionOperand : public ZoneObject {
|
| static void TearDownCaches();
|
|
|
| protected:
|
| - typedef BitField64<Kind, 0, 3> KindField;
|
| + typedef BitField<Kind, 0, 3> KindField;
|
|
|
| - uint64_t value_;
|
| + uint32_t value_;
|
| };
|
|
|
| typedef ZoneVector<InstructionOperand*> InstructionOperandVector;
|
| @@ -115,27 +115,29 @@ class UnallocatedOperand : public InstructionOperand {
|
| USED_AT_END
|
| };
|
|
|
| + static const int kInvalidVirtualRegister = -1;
|
| +
|
| explicit UnallocatedOperand(ExtendedPolicy policy)
|
| - : InstructionOperand(UNALLOCATED, 0) {
|
| - value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister);
|
| + : InstructionOperand(UNALLOCATED, 0),
|
| + virtual_register_(kInvalidVirtualRegister) {
|
| value_ |= BasicPolicyField::encode(EXTENDED_POLICY);
|
| value_ |= ExtendedPolicyField::encode(policy);
|
| value_ |= LifetimeField::encode(USED_AT_END);
|
| }
|
|
|
| UnallocatedOperand(BasicPolicy policy, int index)
|
| - : InstructionOperand(UNALLOCATED, 0) {
|
| + : InstructionOperand(UNALLOCATED, 0),
|
| + virtual_register_(kInvalidVirtualRegister) {
|
| DCHECK(policy == FIXED_SLOT);
|
| - value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister);
|
| value_ |= BasicPolicyField::encode(policy);
|
| - value_ |= static_cast<int64_t>(index) << FixedSlotIndexField::kShift;
|
| + value_ |= static_cast<int32_t>(index) << FixedSlotIndexField::kShift;
|
| DCHECK(this->fixed_slot_index() == index);
|
| }
|
|
|
| UnallocatedOperand(ExtendedPolicy policy, int index)
|
| - : InstructionOperand(UNALLOCATED, 0) {
|
| + : InstructionOperand(UNALLOCATED, 0),
|
| + virtual_register_(kInvalidVirtualRegister) {
|
| DCHECK(policy == FIXED_REGISTER || policy == FIXED_DOUBLE_REGISTER);
|
| - value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister);
|
| value_ |= BasicPolicyField::encode(EXTENDED_POLICY);
|
| value_ |= ExtendedPolicyField::encode(policy);
|
| value_ |= LifetimeField::encode(USED_AT_END);
|
| @@ -143,8 +145,8 @@ class UnallocatedOperand : public InstructionOperand {
|
| }
|
|
|
| UnallocatedOperand(ExtendedPolicy policy, Lifetime lifetime)
|
| - : InstructionOperand(UNALLOCATED, 0) {
|
| - value_ |= VirtualRegisterField::encode(kInvalidVirtualRegister);
|
| + : InstructionOperand(UNALLOCATED, 0),
|
| + virtual_register_(kInvalidVirtualRegister) {
|
| value_ |= BasicPolicyField::encode(EXTENDED_POLICY);
|
| value_ |= ExtendedPolicyField::encode(policy);
|
| value_ |= LifetimeField::encode(lifetime);
|
| @@ -172,35 +174,32 @@ class UnallocatedOperand : public InstructionOperand {
|
| // because it accommodates a larger pay-load.
|
| //
|
| // For FIXED_SLOT policy:
|
| - // +------------------------------------------+
|
| - // | slot_index | vreg | 0 | 001 |
|
| - // +------------------------------------------+
|
| + // +-----------------------------+
|
| + // | slot_index | 0 | 001 |
|
| + // +-----------------------------+
|
| //
|
| // For all other (extended) policies:
|
| - // +------------------------------------------+
|
| - // | reg_index | L | PPP | vreg | 1 | 001 | L ... Lifetime
|
| - // +------------------------------------------+ P ... Policy
|
| + // +----------------------------------+
|
| + // | reg_index | L | PPP | 1 | 001 | L ... Lifetime
|
| + // +----------------------------------+ P ... Policy
|
| //
|
| // The slot index is a signed value which requires us to decode it manually
|
| - // instead of using the BitField64 utility class.
|
| + // instead of using the BitField utility class.
|
|
|
| // The superclass has a KindField.
|
| STATIC_ASSERT(KindField::kSize == 3);
|
|
|
| // BitFields for all unallocated operands.
|
| - class BasicPolicyField : public BitField64<BasicPolicy, 3, 1> {};
|
| - class VirtualRegisterField : public BitField64<unsigned, 4, 30> {};
|
| + class BasicPolicyField : public BitField<BasicPolicy, 3, 1> {};
|
|
|
| // BitFields specific to BasicPolicy::FIXED_SLOT.
|
| - class FixedSlotIndexField : public BitField64<int, 34, 30> {};
|
| + class FixedSlotIndexField : public BitField<int, 4, 28> {};
|
|
|
| // BitFields specific to BasicPolicy::EXTENDED_POLICY.
|
| - class ExtendedPolicyField : public BitField64<ExtendedPolicy, 34, 3> {};
|
| - class LifetimeField : public BitField64<Lifetime, 37, 1> {};
|
| - class FixedRegisterField : public BitField64<int, 38, 6> {};
|
| + class ExtendedPolicyField : public BitField<ExtendedPolicy, 4, 3> {};
|
| + class LifetimeField : public BitField<Lifetime, 7, 1> {};
|
| + class FixedRegisterField : public BitField<int, 8, 6> {};
|
|
|
| - static const int kInvalidVirtualRegister = VirtualRegisterField::kMax;
|
| - static const int kMaxVirtualRegisters = VirtualRegisterField::kMax;
|
| static const int kFixedSlotIndexWidth = FixedSlotIndexField::kSize;
|
| static const int kMaxFixedSlotIndex = (1 << (kFixedSlotIndexWidth - 1)) - 1;
|
| static const int kMinFixedSlotIndex = -(1 << (kFixedSlotIndexWidth - 1));
|
| @@ -244,7 +243,7 @@ class UnallocatedOperand : public InstructionOperand {
|
| // [fixed_slot_index]: Only for FIXED_SLOT.
|
| int fixed_slot_index() const {
|
| DCHECK(HasFixedSlotPolicy());
|
| - return static_cast<int>(bit_cast<int64_t>(value_) >>
|
| + return static_cast<int>(bit_cast<int32_t>(value_) >>
|
| FixedSlotIndexField::kShift);
|
| }
|
|
|
| @@ -255,16 +254,18 @@ class UnallocatedOperand : public InstructionOperand {
|
| }
|
|
|
| // [virtual_register]: The virtual register ID for this operand.
|
| - int virtual_register() const { return VirtualRegisterField::decode(value_); }
|
| - void set_virtual_register(unsigned id) {
|
| - value_ = VirtualRegisterField::update(value_, id);
|
| - }
|
| + int32_t virtual_register() const { return virtual_register_; }
|
| + void set_virtual_register(int32_t id) { virtual_register_ = id; }
|
|
|
| // [lifetime]: Only for non-FIXED_SLOT.
|
| bool IsUsedAtStart() const {
|
| DCHECK(basic_policy() == EXTENDED_POLICY);
|
| return LifetimeField::decode(value_) == USED_AT_START;
|
| }
|
| +
|
| + private:
|
| + // TODO(dcarney): this should really be unsigned.
|
| + int32_t virtual_register_;
|
| };
|
|
|
|
|
| @@ -947,7 +948,7 @@ class InstructionSequence FINAL : public ZoneObject {
|
|
|
| InstructionSequence(Zone* zone, InstructionBlocks* instruction_blocks);
|
|
|
| - int NextVirtualRegister() { return next_virtual_register_++; }
|
| + int NextVirtualRegister();
|
| int VirtualRegisterCount() const { return next_virtual_register_; }
|
|
|
| const InstructionBlocks& instruction_blocks() const {
|
|
|