Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: runtime/vm/assembler_x64.cc

Issue 11358262: Add support for XMM8..XMM15 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fixes and more tests. Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/assembler_x64_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_X64) 6 #if defined(TARGET_ARCH_X64)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/heap.h" 9 #include "vm/heap.h"
10 #include "vm/memory_region.h" 10 #include "vm/memory_region.h"
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 388
389 void Assembler::leaq(Register dst, const Address& src) { 389 void Assembler::leaq(Register dst, const Address& src) {
390 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 390 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
391 EmitOperandREX(dst, src, REX_W); 391 EmitOperandREX(dst, src, REX_W);
392 EmitUint8(0x8D); 392 EmitUint8(0x8D);
393 EmitOperand(dst & 7, src); 393 EmitOperand(dst & 7, src);
394 } 394 }
395 395
396 396
397 void Assembler::movss(XmmRegister dst, const Address& src) { 397 void Assembler::movss(XmmRegister dst, const Address& src) {
398 // TODO(srdjan): implement and test XMM8 - XMM15. 398 ASSERT(dst <= XMM15);
399 ASSERT(dst <= XMM7);
400 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 399 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
401 EmitUint8(0xF3); 400 EmitUint8(0xF3);
402 EmitOperandREX(0, src, REX_NONE); 401 EmitREX_RB(dst, src);
403 EmitUint8(0x0F); 402 EmitUint8(0x0F);
404 EmitUint8(0x10); 403 EmitUint8(0x10);
405 EmitOperand(dst & 7, src); 404 EmitOperand(dst & 7, src);
406 } 405 }
407 406
408 407
409 void Assembler::movss(const Address& dst, XmmRegister src) { 408 void Assembler::movss(const Address& dst, XmmRegister src) {
410 // TODO(srdjan): implement and test XMM8 - XMM15. 409 ASSERT(src <= XMM15);
411 ASSERT(src <= XMM7);
412 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 410 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
413 EmitUint8(0xF3); 411 EmitUint8(0xF3);
414 EmitOperandREX(0, dst, REX_NONE); 412 EmitREX_RB(src, dst);
415 EmitUint8(0x0F); 413 EmitUint8(0x0F);
416 EmitUint8(0x11); 414 EmitUint8(0x11);
417 EmitOperand(src & 7, dst); 415 EmitOperand(src & 7, dst);
418 } 416 }
419 417
420 418
421 void Assembler::movss(XmmRegister dst, XmmRegister src) { 419 void Assembler::movss(XmmRegister dst, XmmRegister src) {
422 // TODO(srdjan): implement and test XMM8 - XMM15. 420 ASSERT(src <= XMM15);
423 ASSERT(src <= XMM7); 421 ASSERT(dst <= XMM15);
424 ASSERT(dst <= XMM7);
425 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 422 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
426 EmitUint8(0xF3); 423 EmitUint8(0xF3);
424 EmitREX_RB(src, dst);
427 EmitUint8(0x0F); 425 EmitUint8(0x0F);
428 EmitUint8(0x11); 426 EmitUint8(0x11);
429 EmitXmmRegisterOperand(src & 7, dst); 427 EmitXmmRegisterOperand(src & 7, dst);
430 } 428 }
431 429
432 430
433 void Assembler::movd(XmmRegister dst, Register src) { 431 void Assembler::movd(XmmRegister dst, Register src) {
434 ASSERT(dst <= XMM7); 432 ASSERT(dst <= XMM15);
435 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 433 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
436 EmitUint8(0x66); 434 EmitUint8(0x66);
435 EmitREX_RB(dst, src);
437 EmitUint8(0x0F); 436 EmitUint8(0x0F);
438 EmitUint8(0x6E); 437 EmitUint8(0x6E);
439 EmitOperand(dst & 7, Operand(src)); 438 EmitOperand(dst & 7, Operand(src));
440 } 439 }
441 440
442 441
443 void Assembler::movd(Register dst, XmmRegister src) { 442 void Assembler::movd(Register dst, XmmRegister src) {
444 ASSERT(src <= XMM7); 443 ASSERT(src <= XMM15);
445 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 444 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
446 EmitUint8(0x66); 445 EmitUint8(0x66);
446 EmitREX_RB(src, dst);
447 EmitUint8(0x0F); 447 EmitUint8(0x0F);
448 EmitUint8(0x7E); 448 EmitUint8(0x7E);
449 EmitOperand(src & 7, Operand(dst)); 449 EmitOperand(src & 7, Operand(dst));
450 } 450 }
451 451
452 452
453 void Assembler::addss(XmmRegister dst, XmmRegister src) { 453 void Assembler::addss(XmmRegister dst, XmmRegister src) {
454 // TODO(srdjan): implement and test XMM8 - XMM15. 454 ASSERT(src <= XMM15);
455 ASSERT(src <= XMM7); 455 ASSERT(dst <= XMM15);
456 ASSERT(dst <= XMM7);
457 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 456 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
458 EmitUint8(0xF3); 457 EmitUint8(0xF3);
458 EmitREX_RB(dst, src);
459 EmitUint8(0x0F); 459 EmitUint8(0x0F);
460 EmitUint8(0x58); 460 EmitUint8(0x58);
461 EmitXmmRegisterOperand(dst, src); 461 EmitXmmRegisterOperand(dst & 7, src);
462 } 462 }
463 463
464 464
465 void Assembler::subss(XmmRegister dst, XmmRegister src) { 465 void Assembler::subss(XmmRegister dst, XmmRegister src) {
466 // TODO(srdjan): implement and test XMM8 - XMM15. 466 ASSERT(src <= XMM15);
467 ASSERT(src <= XMM7); 467 ASSERT(dst <= XMM15);
468 ASSERT(dst <= XMM7);
469 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 468 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
470 EmitUint8(0xF3); 469 EmitUint8(0xF3);
470 EmitREX_RB(dst, src);
471 EmitUint8(0x0F); 471 EmitUint8(0x0F);
472 EmitUint8(0x5C); 472 EmitUint8(0x5C);
473 EmitXmmRegisterOperand(dst, src); 473 EmitXmmRegisterOperand(dst & 7, src);
474 } 474 }
475 475
476 476
477 void Assembler::mulss(XmmRegister dst, XmmRegister src) { 477 void Assembler::mulss(XmmRegister dst, XmmRegister src) {
478 // TODO(srdjan): implement and test XMM8 - XMM15. 478 ASSERT(src <= XMM15);
479 ASSERT(src <= XMM7); 479 ASSERT(dst <= XMM15);
480 ASSERT(dst <= XMM7);
481 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 480 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
482 EmitUint8(0xF3); 481 EmitUint8(0xF3);
482 EmitREX_RB(dst, src);
483 EmitUint8(0x0F); 483 EmitUint8(0x0F);
484 EmitUint8(0x59); 484 EmitUint8(0x59);
485 EmitXmmRegisterOperand(dst, src); 485 EmitXmmRegisterOperand(dst & 7, src);
486 } 486 }
487 487
488 488
489 void Assembler::divss(XmmRegister dst, XmmRegister src) { 489 void Assembler::divss(XmmRegister dst, XmmRegister src) {
490 // TODO(srdjan): implement and test XMM8 - XMM15. 490 ASSERT(src <= XMM15);
491 ASSERT(src <= XMM7); 491 ASSERT(dst <= XMM15);
492 ASSERT(dst <= XMM7);
493 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 492 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
494 EmitUint8(0xF3); 493 EmitUint8(0xF3);
494 EmitREX_RB(dst, src);
495 EmitUint8(0x0F); 495 EmitUint8(0x0F);
496 EmitUint8(0x5E); 496 EmitUint8(0x5E);
497 EmitXmmRegisterOperand(dst, src); 497 EmitXmmRegisterOperand(dst & 7, src);
498 } 498 }
499 499
500 500
501 void Assembler::movsd(XmmRegister dst, const Address& src) { 501 void Assembler::movsd(XmmRegister dst, const Address& src) {
502 // TODO(srdjan): implement and test XMM8 - XMM15. 502 ASSERT(dst <= XMM15);
503 ASSERT(dst <= XMM7);
504 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 503 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
505 EmitUint8(0xF2); 504 EmitUint8(0xF2);
506 EmitOperandREX(0, src, REX_NONE); 505 EmitREX_RB(dst, src);
507 EmitUint8(0x0F); 506 EmitUint8(0x0F);
508 EmitUint8(0x10); 507 EmitUint8(0x10);
509 EmitOperand(dst & 7, src); 508 EmitOperand(dst & 7, src);
510 } 509 }
511 510
512 511
513 void Assembler::movsd(const Address& dst, XmmRegister src) { 512 void Assembler::movsd(const Address& dst, XmmRegister src) {
514 // TODO(srdjan): implement and test XMM8 - XMM15. 513 ASSERT(src <= XMM15);
515 ASSERT(src <= XMM7);
516 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 514 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
517 EmitUint8(0xF2); 515 EmitUint8(0xF2);
518 EmitOperandREX(0, dst, REX_NONE); 516 EmitREX_RB(src, dst);
519 EmitUint8(0x0F); 517 EmitUint8(0x0F);
520 EmitUint8(0x11); 518 EmitUint8(0x11);
521 EmitOperand(src & 7, dst); 519 EmitOperand(src & 7, dst);
522 } 520 }
523 521
524 522
525 void Assembler::movsd(XmmRegister dst, XmmRegister src) { 523 void Assembler::movsd(XmmRegister dst, XmmRegister src) {
526 // TODO(srdjan): implement and test XMM8 - XMM15. 524 ASSERT(src <= XMM15);
527 ASSERT(src <= XMM7); 525 ASSERT(dst <= XMM15);
528 ASSERT(dst <= XMM7);
529 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 526 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
530 EmitUint8(0xF2); 527 EmitUint8(0xF2);
528 EmitREX_RB(src, dst);
531 EmitUint8(0x0F); 529 EmitUint8(0x0F);
532 EmitUint8(0x11); 530 EmitUint8(0x11);
533 EmitXmmRegisterOperand(src & 7, dst); 531 EmitXmmRegisterOperand(src & 7, dst);
534 } 532 }
535 533
536 534
537 void Assembler::movaps(XmmRegister dst, XmmRegister src) { 535 void Assembler::movaps(XmmRegister dst, XmmRegister src) {
538 // TODO(vegorov): implement and test XMM8 - XMM15. 536 ASSERT(src <= XMM15);
539 ASSERT(src <= XMM7); 537 ASSERT(dst <= XMM15);
540 ASSERT(dst <= XMM7);
541 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 538 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
539 EmitREX_RB(dst, src);
542 EmitUint8(0x0F); 540 EmitUint8(0x0F);
543 EmitUint8(0x28); 541 EmitUint8(0x28);
544 EmitXmmRegisterOperand(dst & 7, src); 542 EmitXmmRegisterOperand(dst & 7, src);
545 } 543 }
546 544
547 545
548 void Assembler::addsd(XmmRegister dst, XmmRegister src) { 546 void Assembler::addsd(XmmRegister dst, XmmRegister src) {
549 // TODO(srdjan): implement and test XMM8 - XMM15. 547 ASSERT(src <= XMM15);
550 ASSERT(src <= XMM7); 548 ASSERT(dst <= XMM15);
551 ASSERT(dst <= XMM7);
552 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 549 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
553 EmitUint8(0xF2); 550 EmitUint8(0xF2);
551 EmitREX_RB(dst, src);
554 EmitUint8(0x0F); 552 EmitUint8(0x0F);
555 EmitUint8(0x58); 553 EmitUint8(0x58);
556 EmitXmmRegisterOperand(dst, src); 554 EmitXmmRegisterOperand(dst & 7, src);
557 } 555 }
558 556
559 557
560 void Assembler::subsd(XmmRegister dst, XmmRegister src) { 558 void Assembler::subsd(XmmRegister dst, XmmRegister src) {
561 // TODO(srdjan): implement and test XMM8 - XMM15. 559 ASSERT(src <= XMM15);
562 ASSERT(src <= XMM7); 560 ASSERT(dst <= XMM15);
563 ASSERT(dst <= XMM7);
564 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 561 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
565 EmitUint8(0xF2); 562 EmitUint8(0xF2);
563 EmitREX_RB(dst, src);
566 EmitUint8(0x0F); 564 EmitUint8(0x0F);
567 EmitUint8(0x5C); 565 EmitUint8(0x5C);
568 EmitXmmRegisterOperand(dst, src); 566 EmitXmmRegisterOperand(dst & 7, src);
569 } 567 }
570 568
571 569
572 void Assembler::mulsd(XmmRegister dst, XmmRegister src) { 570 void Assembler::mulsd(XmmRegister dst, XmmRegister src) {
573 // TODO(srdjan): implement and test XMM8 - XMM15. 571 ASSERT(src <= XMM15);
574 ASSERT(src <= XMM7); 572 ASSERT(dst <= XMM15);
575 ASSERT(dst <= XMM7);
576 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 573 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
577 EmitUint8(0xF2); 574 EmitUint8(0xF2);
575 EmitREX_RB(dst, src);
578 EmitUint8(0x0F); 576 EmitUint8(0x0F);
579 EmitUint8(0x59); 577 EmitUint8(0x59);
580 EmitXmmRegisterOperand(dst, src); 578 EmitXmmRegisterOperand(dst & 7, src);
581 } 579 }
582 580
583 581
584 void Assembler::divsd(XmmRegister dst, XmmRegister src) { 582 void Assembler::divsd(XmmRegister dst, XmmRegister src) {
585 // TODO(srdjan): implement and test XMM8 - XMM15. 583 ASSERT(src <= XMM15);
586 ASSERT(src <= XMM7); 584 ASSERT(dst <= XMM15);
587 ASSERT(dst <= XMM7);
588 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 585 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
589 EmitUint8(0xF2); 586 EmitUint8(0xF2);
587 EmitREX_RB(dst, src);
590 EmitUint8(0x0F); 588 EmitUint8(0x0F);
591 EmitUint8(0x5E); 589 EmitUint8(0x5E);
592 EmitXmmRegisterOperand(dst, src); 590 EmitXmmRegisterOperand(dst & 7, src);
593 } 591 }
594 592
595 593
596 void Assembler::comisd(XmmRegister a, XmmRegister b) { 594 void Assembler::comisd(XmmRegister a, XmmRegister b) {
597 ASSERT(a <= XMM7); 595 ASSERT(a <= XMM15);
598 ASSERT(b <= XMM7); 596 ASSERT(b <= XMM15);
599 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 597 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
600 EmitUint8(0x66); 598 EmitUint8(0x66);
599 EmitREX_RB(a, b);
601 EmitUint8(0x0F); 600 EmitUint8(0x0F);
602 EmitUint8(0x2F); 601 EmitUint8(0x2F);
603 EmitXmmRegisterOperand(a, b); 602 EmitXmmRegisterOperand(a & 7, b);
604 } 603 }
605 604
606 605
607 void Assembler::movmskpd(Register dst, XmmRegister src) { 606 void Assembler::movmskpd(Register dst, XmmRegister src) {
608 ASSERT(src <= XMM7); 607 ASSERT(src <= XMM15);
609 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 608 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
610 EmitUint8(0x66); 609 EmitUint8(0x66);
610 EmitREX_RB(dst, src);
611 EmitUint8(0x0F); 611 EmitUint8(0x0F);
612 EmitUint8(0x50); 612 EmitUint8(0x50);
613 EmitXmmRegisterOperand(dst, src); 613 EmitXmmRegisterOperand(dst & 7, src);
614 } 614 }
615 615
616 616
617 void Assembler::sqrtsd(XmmRegister dst, XmmRegister src) { 617 void Assembler::sqrtsd(XmmRegister dst, XmmRegister src) {
618 ASSERT(dst <= XMM7); 618 ASSERT(dst <= XMM15);
619 ASSERT(src <= XMM7); 619 ASSERT(src <= XMM15);
620 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 620 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
621 EmitUint8(0xF2); 621 EmitUint8(0xF2);
622 EmitREX_RB(dst, src);
622 EmitUint8(0x0F); 623 EmitUint8(0x0F);
623 EmitUint8(0x51); 624 EmitUint8(0x51);
624 EmitXmmRegisterOperand(dst, src); 625 EmitXmmRegisterOperand(dst & 7, src);
625 } 626 }
626 627
627 628
628 void Assembler::xorpd(XmmRegister dst, const Address& src) { 629 void Assembler::xorpd(XmmRegister dst, const Address& src) {
629 ASSERT(dst <= XMM7); 630 ASSERT(dst <= XMM15);
630 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 631 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
631 EmitUint8(0x66); 632 EmitUint8(0x66);
632 EmitOperandREX(0, src, REX_NONE); 633 EmitOperandREX(dst, src, REX_NONE);
633 EmitUint8(0x0F); 634 EmitUint8(0x0F);
634 EmitUint8(0x57); 635 EmitUint8(0x57);
635 EmitOperand(dst & 7, src); 636 EmitOperand(dst & 7, src);
636 } 637 }
637 638
638 639
639 void Assembler::xorpd(XmmRegister dst, XmmRegister src) { 640 void Assembler::xorpd(XmmRegister dst, XmmRegister src) {
640 ASSERT(dst <= XMM7); 641 ASSERT(dst <= XMM15);
641 ASSERT(src <= XMM7); 642 ASSERT(src <= XMM15);
642 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 643 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
643 EmitUint8(0x66); 644 EmitUint8(0x66);
645 EmitREX_RB(dst, src);
644 EmitUint8(0x0F); 646 EmitUint8(0x0F);
645 EmitUint8(0x57); 647 EmitUint8(0x57);
646 EmitXmmRegisterOperand(dst, src); 648 EmitXmmRegisterOperand(dst & 7, src);
647 } 649 }
648 650
649 651
650 void Assembler::cvtsi2sd(XmmRegister dst, Register src) { 652 void Assembler::cvtsi2sd(XmmRegister dst, Register src) {
651 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 653 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
652 ASSERT(dst <= XMM7); 654 ASSERT(dst <= XMM15);
653 Operand operand(src); 655 Operand operand(src);
654 EmitUint8(0xF2); 656 EmitUint8(0xF2);
655 EmitOperandREX(0, operand, REX_W); 657 EmitOperandREX(dst, operand, REX_W);
656 EmitUint8(0x0F); 658 EmitUint8(0x0F);
657 EmitUint8(0x2A); 659 EmitUint8(0x2A);
658 EmitOperand(dst, operand); 660 EmitOperand(dst & 7, operand);
659 } 661 }
660 662
661 663
662 void Assembler::cvttsd2siq(Register dst, XmmRegister src) { 664 void Assembler::cvttsd2siq(Register dst, XmmRegister src) {
663 ASSERT(src <= XMM7); 665 ASSERT(src <= XMM15);
664 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 666 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
665 EmitUint8(0xF2); 667 EmitUint8(0xF2);
666 Operand operand(dst); 668 Operand operand(dst);
667 EmitOperandREX(0, operand, REX_W); 669 EmitREX_RB(dst, src, REX_W);
668 EmitUint8(0x0F); 670 EmitUint8(0x0F);
669 EmitUint8(0x2C); 671 EmitUint8(0x2C);
670 EmitXmmRegisterOperand(dst, src); 672 EmitXmmRegisterOperand(dst & 7, src);
671 } 673 }
672 674
673 675
674 void Assembler::cvtss2sd(XmmRegister dst, XmmRegister src) { 676 void Assembler::cvtss2sd(XmmRegister dst, XmmRegister src) {
675 ASSERT(src <= XMM7); 677 ASSERT(src <= XMM15);
676 ASSERT(dst <= XMM7); 678 ASSERT(dst <= XMM15);
677 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 679 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
678 EmitUint8(0xF3); 680 EmitUint8(0xF3);
681 EmitREX_RB(dst, src);
679 EmitUint8(0x0F); 682 EmitUint8(0x0F);
680 EmitUint8(0x5A); 683 EmitUint8(0x5A);
681 EmitXmmRegisterOperand(dst, src); 684 EmitXmmRegisterOperand(dst & 7, src);
682 } 685 }
683 686
684 687
685 void Assembler::cvtsd2ss(XmmRegister dst, XmmRegister src) { 688 void Assembler::cvtsd2ss(XmmRegister dst, XmmRegister src) {
686 ASSERT(src <= XMM7); 689 ASSERT(src <= XMM15);
687 ASSERT(dst <= XMM7); 690 ASSERT(dst <= XMM15);
688 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 691 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
689 EmitUint8(0xF2); 692 EmitUint8(0xF2);
693 EmitREX_RB(dst, src);
690 EmitUint8(0x0F); 694 EmitUint8(0x0F);
691 EmitUint8(0x5A); 695 EmitUint8(0x5A);
692 EmitXmmRegisterOperand(dst, src); 696 EmitXmmRegisterOperand(dst & 7, src);
693 } 697 }
694 698
695 699
696 void Assembler::fldl(const Address& src) { 700 void Assembler::fldl(const Address& src) {
697 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 701 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
698 EmitUint8(0xDD); 702 EmitUint8(0xDD);
699 EmitOperand(0, src); 703 EmitOperand(0, src);
700 } 704 }
701 705
702 706
(...skipping 1397 matching lines...) Expand 10 before | Expand all | Expand 10 after
2100 }; 2104 };
2101 2105
2102 2106
2103 const char* Assembler::RegisterName(Register reg) { 2107 const char* Assembler::RegisterName(Register reg) {
2104 ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters)); 2108 ASSERT((0 <= reg) && (reg < kNumberOfCpuRegisters));
2105 return cpu_reg_names[reg]; 2109 return cpu_reg_names[reg];
2106 } 2110 }
2107 2111
2108 2112
2109 static const char* xmm_reg_names[kNumberOfXmmRegisters] = { 2113 static const char* xmm_reg_names[kNumberOfXmmRegisters] = {
2110 "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7" 2114 "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
2115 "xmm8", "xmm9", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15"
2111 }; 2116 };
2112 2117
2113 2118
2114 const char* Assembler::XmmRegisterName(XmmRegister reg) { 2119 const char* Assembler::XmmRegisterName(XmmRegister reg) {
2115 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 2120 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
2116 return xmm_reg_names[reg]; 2121 return xmm_reg_names[reg];
2117 } 2122 }
2118 2123
2119 2124
2120 } // namespace dart 2125 } // namespace dart
2121 2126
2122 #endif // defined TARGET_ARCH_X64 2127 #endif // defined TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « runtime/vm/assembler_x64.h ('k') | runtime/vm/assembler_x64_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698