| Index: test/unittests/compiler/instruction-sequence-unittest.cc | 
| diff --git a/test/unittests/compiler/instruction-sequence-unittest.cc b/test/unittests/compiler/instruction-sequence-unittest.cc | 
| index a0a86e043a4e9ef29243953d6ee4b85f191cd799..0a17100f25de0e87c38ee9cae98c0d8fb00e2e61 100644 | 
| --- a/test/unittests/compiler/instruction-sequence-unittest.cc | 
| +++ b/test/unittests/compiler/instruction-sequence-unittest.cc | 
| @@ -41,7 +41,6 @@ static void InitializeRegisterNames() { | 
| } | 
| } | 
|  | 
| - | 
| InstructionSequenceTest::InstructionSequenceTest() | 
| : sequence_(nullptr), | 
| num_general_registers_(kDefaultNRegs), | 
| @@ -62,6 +61,32 @@ void InstructionSequenceTest::SetNumRegs(int num_general_registers, | 
| num_double_registers_ = num_double_registers; | 
| } | 
|  | 
| +int InstructionSequenceTest::GetNumRegs(MachineRepresentation rep) { | 
| +  switch (rep) { | 
| +    case MachineRepresentation::kFloat32: | 
| +      return config()->num_float_registers(); | 
| +    case MachineRepresentation::kFloat64: | 
| +      return config()->num_double_registers(); | 
| +    case MachineRepresentation::kSimd128: | 
| +      return config()->num_simd128_registers(); | 
| +    default: | 
| +      return config()->num_general_registers(); | 
| +  } | 
| +} | 
| + | 
| +int InstructionSequenceTest::GetAllocatableCode(int index, | 
| +                                                MachineRepresentation rep) { | 
| +  switch (rep) { | 
| +    case MachineRepresentation::kFloat32: | 
| +      return config()->GetAllocatableFloatCode(index); | 
| +    case MachineRepresentation::kFloat64: | 
| +      return config()->GetAllocatableDoubleCode(index); | 
| +    case MachineRepresentation::kSimd128: | 
| +      return config()->GetAllocatableSimd128Code(index); | 
| +    default: | 
| +      return config()->GetAllocatableGeneralCode(index); | 
| +  } | 
| +} | 
|  | 
| RegisterConfiguration* InstructionSequenceTest::config() { | 
| if (!config_) { | 
| @@ -149,13 +174,12 @@ InstructionSequenceTest::TestOperand InstructionSequenceTest::Imm(int32_t imm) { | 
|  | 
| InstructionSequenceTest::VReg InstructionSequenceTest::Define( | 
| TestOperand output_op) { | 
| -  VReg vreg = NewReg(); | 
| +  VReg vreg = NewReg(output_op); | 
| InstructionOperand outputs[1]{ConvertOutputOp(vreg, output_op)}; | 
| Emit(kArchNop, 1, outputs); | 
| return vreg; | 
| } | 
|  | 
| - | 
| Instruction* InstructionSequenceTest::Return(TestOperand input_op_0) { | 
| block_returns_ = true; | 
| InstructionOperand inputs[1]{ConvertInputOp(input_op_0)}; | 
| @@ -240,7 +264,7 @@ Instruction* InstructionSequenceTest::EmitI(TestOperand input_op_0, | 
|  | 
| InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI( | 
| TestOperand output_op, size_t input_size, TestOperand* inputs) { | 
| -  VReg output_vreg = NewReg(); | 
| +  VReg output_vreg = NewReg(output_op); | 
| InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)}; | 
| InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs); | 
| Emit(kArchNop, 1, outputs, input_size, mapped_inputs); | 
| @@ -259,7 +283,8 @@ InstructionSequenceTest::VReg InstructionSequenceTest::EmitOI( | 
| InstructionSequenceTest::VRegPair InstructionSequenceTest::EmitOOI( | 
| TestOperand output_op_0, TestOperand output_op_1, size_t input_size, | 
| TestOperand* inputs) { | 
| -  VRegPair output_vregs = std::make_pair(NewReg(), NewReg()); | 
| +  VRegPair output_vregs = | 
| +      std::make_pair(NewReg(output_op_0), NewReg(output_op_1)); | 
| InstructionOperand outputs[2]{ | 
| ConvertOutputOp(output_vregs.first, output_op_0), | 
| ConvertOutputOp(output_vregs.second, output_op_1)}; | 
| @@ -280,7 +305,7 @@ InstructionSequenceTest::VRegPair InstructionSequenceTest::EmitOOI( | 
|  | 
| InstructionSequenceTest::VReg InstructionSequenceTest::EmitCall( | 
| TestOperand output_op, size_t input_size, TestOperand* inputs) { | 
| -  VReg output_vreg = NewReg(); | 
| +  VReg output_vreg = NewReg(output_op); | 
| InstructionOperand outputs[1]{ConvertOutputOp(output_vreg, output_op)}; | 
| CHECK(UnallocatedOperand::cast(outputs[0]).HasFixedPolicy()); | 
| InstructionOperand* mapped_inputs = ConvertInputs(input_size, inputs); | 
| @@ -387,11 +412,25 @@ InstructionOperand InstructionSequenceTest::ConvertInputOp(TestOperand op) { | 
| case kSlot: | 
| return Unallocated(op, UnallocatedOperand::MUST_HAVE_SLOT, | 
| UnallocatedOperand::USED_AT_START); | 
| -    case kFixedRegister: | 
| -      CHECK(0 <= op.value_ && op.value_ < num_general_registers_); | 
| -      return Unallocated(op, UnallocatedOperand::FIXED_REGISTER, op.value_); | 
| +    case kFixedRegister: { | 
| +      MachineRepresentation rep = GetCanonicalRep(op); | 
| +      CHECK(0 <= op.value_ && op.value_ < GetNumRegs(rep)); | 
| +      if (DoesRegisterAllocation()) { | 
| +        auto extended_policy = IsFloatingPoint(rep) | 
| +                                   ? UnallocatedOperand::FIXED_FP_REGISTER | 
| +                                   : UnallocatedOperand::FIXED_REGISTER; | 
| +        return Unallocated(op, extended_policy, op.value_); | 
| +      } else { | 
| +        return AllocatedOperand(LocationOperand::REGISTER, rep, op.value_); | 
| +      } | 
| +    } | 
| case kFixedSlot: | 
| -      return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_); | 
| +      if (DoesRegisterAllocation()) { | 
| +        return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_); | 
| +      } else { | 
| +        return AllocatedOperand(LocationOperand::STACK_SLOT, | 
| +                                GetCanonicalRep(op), op.value_); | 
| +      } | 
| default: | 
| break; | 
| } | 
| @@ -410,10 +449,24 @@ InstructionOperand InstructionSequenceTest::ConvertOutputOp(VReg vreg, | 
| case kRegister: | 
| return Unallocated(op, UnallocatedOperand::MUST_HAVE_REGISTER); | 
| case kFixedSlot: | 
| -      return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_); | 
| -    case kFixedRegister: | 
| -      CHECK(0 <= op.value_ && op.value_ < num_general_registers_); | 
| -      return Unallocated(op, UnallocatedOperand::FIXED_REGISTER, op.value_); | 
| +      if (DoesRegisterAllocation()) { | 
| +        return Unallocated(op, UnallocatedOperand::FIXED_SLOT, op.value_); | 
| +      } else { | 
| +        return AllocatedOperand(LocationOperand::STACK_SLOT, | 
| +                                GetCanonicalRep(op), op.value_); | 
| +      } | 
| +    case kFixedRegister: { | 
| +      MachineRepresentation rep = GetCanonicalRep(op); | 
| +      CHECK(0 <= op.value_ && op.value_ < GetNumRegs(rep)); | 
| +      if (DoesRegisterAllocation()) { | 
| +        auto extended_policy = IsFloatingPoint(rep) | 
| +                                   ? UnallocatedOperand::FIXED_FP_REGISTER | 
| +                                   : UnallocatedOperand::FIXED_REGISTER; | 
| +        return Unallocated(op, extended_policy, op.value_); | 
| +      } else { | 
| +        return AllocatedOperand(LocationOperand::REGISTER, rep, op.value_); | 
| +      } | 
| +    } | 
| default: | 
| break; | 
| } | 
|  |