OLD | NEW |
---|---|
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
305 } else if (source->IsConstantOperand()) { | 305 } else if (source->IsConstantOperand()) { |
306 ASSERT(destination->IsRegister() || destination->IsStackSlot()); | 306 ASSERT(destination->IsRegister() || destination->IsStackSlot()); |
307 Immediate src = cgen_->ToImmediate(source); | 307 Immediate src = cgen_->ToImmediate(source); |
308 Operand dst = cgen_->ToOperand(destination); | 308 Operand dst = cgen_->ToOperand(destination); |
309 __ mov(dst, src); | 309 __ mov(dst, src); |
310 | 310 |
311 } else if (source->IsDoubleRegister()) { | 311 } else if (source->IsDoubleRegister()) { |
312 ASSERT(destination->IsDoubleRegister() || | 312 ASSERT(destination->IsDoubleRegister() || |
313 destination->IsDoubleStackSlot()); | 313 destination->IsDoubleStackSlot()); |
314 XMMRegister src = cgen_->ToDoubleRegister(source); | 314 XMMRegister src = cgen_->ToDoubleRegister(source); |
315 Operand dst = cgen_->ToOperand(destination); | 315 if (destination->IsDoubleStackSlot()) { |
316 __ movdbl(dst, src); | 316 Operand dst = cgen_->ToOperand(destination); |
317 | 317 __ movdbl(dst, src); |
318 } else { | |
Kevin Millikin (Chromium)
2011/04/18 14:02:59
To fit the rest of the code, you should turn the A
fschneider
2011/04/19 09:16:24
Done.
| |
319 XMMRegister dst = cgen_->ToDoubleRegister(destination); | |
320 __ movaps(dst, src); | |
321 } | |
318 } else if (source->IsDoubleStackSlot()) { | 322 } else if (source->IsDoubleStackSlot()) { |
319 ASSERT(destination->IsDoubleRegister() || | 323 ASSERT(destination->IsDoubleRegister() || |
320 destination->IsDoubleStackSlot()); | 324 destination->IsDoubleStackSlot()); |
321 Operand src = cgen_->ToOperand(source); | 325 Operand src = cgen_->ToOperand(source); |
322 if (destination->IsDoubleRegister()) { | 326 if (destination->IsDoubleRegister()) { |
323 XMMRegister dst = cgen_->ToDoubleRegister(destination); | 327 XMMRegister dst = cgen_->ToDoubleRegister(destination); |
324 __ movdbl(dst, src); | 328 __ movdbl(dst, src); |
325 } else { | 329 } else { |
326 // We rely on having xmm0 available as a fixed scratch register. | 330 // We rely on having xmm0 available as a fixed scratch register. |
327 Operand dst = cgen_->ToOperand(destination); | 331 Operand dst = cgen_->ToOperand(destination); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
384 __ xor_(tmp0, src); | 388 __ xor_(tmp0, src); |
385 __ xor_(src, tmp0); | 389 __ xor_(src, tmp0); |
386 __ xor_(tmp0, src); | 390 __ xor_(tmp0, src); |
387 __ mov(dst, tmp0); | 391 __ mov(dst, tmp0); |
388 } else { | 392 } else { |
389 __ mov(tmp0, dst); | 393 __ mov(tmp0, dst); |
390 __ mov(tmp1, src); | 394 __ mov(tmp1, src); |
391 __ mov(dst, tmp1); | 395 __ mov(dst, tmp1); |
392 __ mov(src, tmp0); | 396 __ mov(src, tmp0); |
393 } | 397 } |
398 } else if (source->IsDoubleRegister() && destination->IsDoubleRegister()) { | |
399 // XMM register-register swap. We rely on having xmm0 | |
400 // available as a fixed scratch register. | |
401 XMMRegister src = cgen_->ToDoubleRegister(source); | |
402 XMMRegister dst = cgen_->ToDoubleRegister(destination); | |
403 __ movaps(xmm0, src); | |
404 __ movaps(src, dst); | |
405 __ movaps(dst, xmm0); | |
394 | 406 |
395 } else if (source->IsDoubleRegister() || destination->IsDoubleRegister()) { | 407 } else if (source->IsDoubleRegister() || destination->IsDoubleRegister()) { |
396 // XMM register-register or register-memory. We rely on having xmm0 | 408 // XMM register-memory swap. We rely on having xmm0 |
397 // available as a fixed scratch register. | 409 // available as a fixed scratch register. |
398 ASSERT(source->IsDoubleRegister() || source->IsDoubleStackSlot()); | 410 ASSERT(source->IsDoubleStackSlot() || destination->IsDoubleStackSlot()); |
399 ASSERT(destination->IsDoubleRegister() || | |
400 destination->IsDoubleStackSlot()); | |
401 XMMRegister reg = cgen_->ToDoubleRegister(source->IsDoubleRegister() | 411 XMMRegister reg = cgen_->ToDoubleRegister(source->IsDoubleRegister() |
402 ? source | 412 ? source |
403 : destination); | 413 : destination); |
404 Operand other = | 414 Operand other = |
405 cgen_->ToOperand(source->IsDoubleRegister() ? destination : source); | 415 cgen_->ToOperand(source->IsDoubleRegister() ? destination : source); |
406 __ movdbl(xmm0, other); | 416 __ movdbl(xmm0, other); |
407 __ movdbl(other, reg); | 417 __ movdbl(other, reg); |
408 __ movdbl(reg, Operand(xmm0)); | 418 __ movdbl(reg, Operand(xmm0)); |
409 | 419 |
410 } else if (source->IsDoubleStackSlot() && destination->IsDoubleStackSlot()) { | 420 } else if (source->IsDoubleStackSlot() && destination->IsDoubleStackSlot()) { |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
457 } else if (destination->IsRegister()) { | 467 } else if (destination->IsRegister()) { |
458 source_uses_[destination->index()] = CountSourceUses(destination); | 468 source_uses_[destination->index()] = CountSourceUses(destination); |
459 } | 469 } |
460 } | 470 } |
461 | 471 |
462 #undef __ | 472 #undef __ |
463 | 473 |
464 } } // namespace v8::internal | 474 } } // namespace v8::internal |
465 | 475 |
466 #endif // V8_TARGET_ARCH_IA32 | 476 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |