| Index: src/ia32/lithium-ia32.cc
|
| ===================================================================
|
| --- src/ia32/lithium-ia32.cc (revision 8088)
|
| +++ src/ia32/lithium-ia32.cc (working copy)
|
| @@ -1797,18 +1797,13 @@
|
| LInstruction* LChunkBuilder::DoToInt32(HToInt32* instr) {
|
| HValue* value = instr->value();
|
| Representation input_rep = value->representation();
|
| - // Register allocator doesn't (yet) support allocation of double
|
| - // temps. Reserve xmm1 explicitly.
|
| - LOperand* xmm_temp =
|
| - CpuFeatures::IsSupported(SSE3)
|
| - ? NULL
|
| - : FixedTemp(xmm1);
|
| +
|
| LInstruction* result;
|
| if (input_rep.IsDouble()) {
|
| LOperand* reg = UseRegister(value);
|
| - // Register allocator doesn't (yet) support allocation of double
|
| - // temps. Reserve xmm1 explicitly.
|
| - result = DefineAsRegister(new LDoubleToI(reg, xmm_temp));
|
| + LOperand* temp_reg =
|
| + CpuFeatures::IsSupported(SSE3) ? NULL : TempRegister();
|
| + result = DefineAsRegister(new LDoubleToI(reg, temp_reg));
|
| } else if (input_rep.IsInteger32()) {
|
| // Canonicalization should already have removed the hydrogen instruction in
|
| // this case, since it is a noop.
|
| @@ -1817,6 +1812,10 @@
|
| } else {
|
| ASSERT(input_rep.IsTagged());
|
| LOperand* reg = UseRegister(value);
|
| + // Register allocator doesn't (yet) support allocation of double
|
| + // temps. Reserve xmm1 explicitly.
|
| + LOperand* xmm_temp =
|
| + CpuFeatures::IsSupported(SSE3) ? NULL : FixedTemp(xmm1);
|
| result = DefineSameAsFirst(new LTaggedToI(reg, xmm_temp));
|
| }
|
| return AssignEnvironment(result);
|
|
|