Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index bebbfd73079bdd6fac4b192e16720b9111719e9e..fd902c2fbda3d5c178d5669c74376928c927f6ac 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -762,66 +762,7 @@ void LCodeGen::DoLabel(LLabel* label) { |
void LCodeGen::DoParallelMove(LParallelMove* move) { |
- // xmm0 must always be a scratch register. |
- XMMRegister xmm_scratch = xmm0; |
- LUnallocated marker_operand(LUnallocated::NONE); |
- |
- Register cpu_scratch = esi; |
- bool destroys_cpu_scratch = false; |
- |
- const ZoneList<LMoveOperands>* moves = |
- resolver_.Resolve(move->move_operands(), &marker_operand); |
- for (int i = moves->length() - 1; i >= 0; --i) { |
- LMoveOperands move = moves->at(i); |
- LOperand* from = move.from(); |
- LOperand* to = move.to(); |
- ASSERT(!from->IsDoubleRegister() || |
- !ToDoubleRegister(from).is(xmm_scratch)); |
- ASSERT(!to->IsDoubleRegister() || !ToDoubleRegister(to).is(xmm_scratch)); |
- ASSERT(!from->IsRegister() || !ToRegister(from).is(cpu_scratch)); |
- ASSERT(!to->IsRegister() || !ToRegister(to).is(cpu_scratch)); |
- if (from->IsConstantOperand()) { |
- __ mov(ToOperand(to), ToImmediate(from)); |
- } else if (from == &marker_operand) { |
- if (to->IsRegister() || to->IsStackSlot()) { |
- __ mov(ToOperand(to), cpu_scratch); |
- ASSERT(destroys_cpu_scratch); |
- } else { |
- ASSERT(to->IsDoubleRegister() || to->IsDoubleStackSlot()); |
- __ movdbl(ToOperand(to), xmm_scratch); |
- } |
- } else if (to == &marker_operand) { |
- if (from->IsRegister() || from->IsStackSlot()) { |
- __ mov(cpu_scratch, ToOperand(from)); |
- destroys_cpu_scratch = true; |
- } else { |
- ASSERT(from->IsDoubleRegister() || from->IsDoubleStackSlot()); |
- __ movdbl(xmm_scratch, ToOperand(from)); |
- } |
- } else if (from->IsRegister()) { |
- __ mov(ToOperand(to), ToRegister(from)); |
- } else if (to->IsRegister()) { |
- __ mov(ToRegister(to), ToOperand(from)); |
- } else if (from->IsStackSlot()) { |
- ASSERT(to->IsStackSlot()); |
- __ push(eax); |
- __ mov(eax, ToOperand(from)); |
- __ mov(ToOperand(to), eax); |
- __ pop(eax); |
- } else if (from->IsDoubleRegister()) { |
- __ movdbl(ToOperand(to), ToDoubleRegister(from)); |
- } else if (to->IsDoubleRegister()) { |
- __ movdbl(ToDoubleRegister(to), ToOperand(from)); |
- } else { |
- ASSERT(to->IsDoubleStackSlot() && from->IsDoubleStackSlot()); |
- __ movdbl(xmm_scratch, ToOperand(from)); |
- __ movdbl(ToOperand(to), xmm_scratch); |
- } |
- } |
- |
- if (destroys_cpu_scratch) { |
- __ mov(cpu_scratch, Operand(ebp, -kPointerSize)); |
- } |
+ resolver_.Resolve(move); |
} |