| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #if V8_TARGET_ARCH_IA32 | 5 #if V8_TARGET_ARCH_IA32 |
| 6 | 6 |
| 7 #include "src/crankshaft/ia32/lithium-codegen-ia32.h" | 7 #include "src/crankshaft/ia32/lithium-codegen-ia32.h" |
| 8 #include "src/crankshaft/ia32/lithium-gap-resolver-ia32.h" | 8 #include "src/crankshaft/ia32/lithium-gap-resolver-ia32.h" |
| 9 #include "src/register-configuration.h" | 9 #include "src/register-configuration.h" |
| 10 | 10 |
| (...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 LOperand* destination = moves_[index].destination(); | 362 LOperand* destination = moves_[index].destination(); |
| 363 EnsureRestored(source); | 363 EnsureRestored(source); |
| 364 EnsureRestored(destination); | 364 EnsureRestored(destination); |
| 365 | 365 |
| 366 // Dispatch on the source and destination operand kinds. Not all | 366 // Dispatch on the source and destination operand kinds. Not all |
| 367 // combinations are possible. | 367 // combinations are possible. |
| 368 if (source->IsRegister() && destination->IsRegister()) { | 368 if (source->IsRegister() && destination->IsRegister()) { |
| 369 // Register-register. | 369 // Register-register. |
| 370 Register src = cgen_->ToRegister(source); | 370 Register src = cgen_->ToRegister(source); |
| 371 Register dst = cgen_->ToRegister(destination); | 371 Register dst = cgen_->ToRegister(destination); |
| 372 __ xchg(dst, src); | 372 __ push(src); |
| 373 __ mov(src, dst); |
| 374 __ pop(dst); |
| 373 | 375 |
| 374 } else if ((source->IsRegister() && destination->IsStackSlot()) || | 376 } else if ((source->IsRegister() && destination->IsStackSlot()) || |
| 375 (source->IsStackSlot() && destination->IsRegister())) { | 377 (source->IsStackSlot() && destination->IsRegister())) { |
| 376 // Register-memory. Use a free register as a temp if possible. Do not | 378 // Register-memory. Use a free register as a temp if possible. Do not |
| 377 // spill on demand because the simple spill implementation cannot avoid | 379 // spill on demand because the simple spill implementation cannot avoid |
| 378 // spilling src at this point. | 380 // spilling src at this point. |
| 379 Register tmp = GetFreeRegisterNot(no_reg); | 381 Register tmp = GetFreeRegisterNot(no_reg); |
| 380 Register reg = | 382 Register reg = |
| 381 cgen_->ToRegister(source->IsRegister() ? source : destination); | 383 cgen_->ToRegister(source->IsRegister() ? source : destination); |
| 382 Operand mem = | 384 Operand mem = |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 source_uses_[destination->index()] = CountSourceUses(destination); | 484 source_uses_[destination->index()] = CountSourceUses(destination); |
| 483 } | 485 } |
| 484 } | 486 } |
| 485 | 487 |
| 486 #undef __ | 488 #undef __ |
| 487 | 489 |
| 488 } // namespace internal | 490 } // namespace internal |
| 489 } // namespace v8 | 491 } // namespace v8 |
| 490 | 492 |
| 491 #endif // V8_TARGET_ARCH_IA32 | 493 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |