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

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

Issue 10968059: Support for unboxed 64-bit integer bitwise operations and equality on ia32. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 2 months 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
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_IA32) 6 #if defined(TARGET_ARCH_IA32)
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 631 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 642
643 void Assembler::xorpd(XmmRegister dst, XmmRegister src) { 643 void Assembler::xorpd(XmmRegister dst, XmmRegister src) {
644 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 644 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
645 EmitUint8(0x66); 645 EmitUint8(0x66);
646 EmitUint8(0x0F); 646 EmitUint8(0x0F);
647 EmitUint8(0x57); 647 EmitUint8(0x57);
648 EmitXmmRegisterOperand(dst, src); 648 EmitXmmRegisterOperand(dst, src);
649 } 649 }
650 650
651 651
652 void Assembler::orpd(XmmRegister dst, XmmRegister src) {
653 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
654 EmitUint8(0x66);
655 EmitUint8(0x0F);
656 EmitUint8(0x56);
657 EmitXmmRegisterOperand(dst, src);
658 }
659
660
652 void Assembler::xorps(XmmRegister dst, const Address& src) { 661 void Assembler::xorps(XmmRegister dst, const Address& src) {
653 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 662 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
654 EmitUint8(0x0F); 663 EmitUint8(0x0F);
655 EmitUint8(0x57); 664 EmitUint8(0x57);
656 EmitOperand(dst, src); 665 EmitOperand(dst, src);
657 } 666 }
658 667
659 668
660 void Assembler::xorps(XmmRegister dst, XmmRegister src) { 669 void Assembler::xorps(XmmRegister dst, XmmRegister src) {
661 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 670 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
662 EmitUint8(0x0F); 671 EmitUint8(0x0F);
663 EmitUint8(0x57); 672 EmitUint8(0x57);
664 EmitXmmRegisterOperand(dst, src); 673 EmitXmmRegisterOperand(dst, src);
665 } 674 }
666 675
667 676
668 void Assembler::andpd(XmmRegister dst, const Address& src) { 677 void Assembler::andpd(XmmRegister dst, const Address& src) {
669 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 678 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
670 EmitUint8(0x66); 679 EmitUint8(0x66);
671 EmitUint8(0x0F); 680 EmitUint8(0x0F);
672 EmitUint8(0x54); 681 EmitUint8(0x54);
673 EmitOperand(dst, src); 682 EmitOperand(dst, src);
674 } 683 }
675 684
676 685
686 void Assembler::andpd(XmmRegister dst, XmmRegister src) {
687 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
688 EmitUint8(0x66);
689 EmitUint8(0x0F);
690 EmitUint8(0x54);
691 EmitXmmRegisterOperand(dst, src);
692 }
693
694
695 void Assembler::pextrd(Register dst, XmmRegister src, const Immediate& imm) {
696 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
697 EmitUint8(0x66);
698 EmitUint8(0x0F);
699 EmitUint8(0x3A);
700 EmitUint8(0x16);
701 EmitOperand(src, Operand(dst));
702 ASSERT(imm.is_uint8());
703 EmitUint8(imm.value());
704 }
705
706
707 void Assembler::pmovsxdq(XmmRegister dst, XmmRegister src) {
708 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
709 EmitUint8(0x66);
710 EmitUint8(0x0F);
711 EmitUint8(0x38);
712 EmitUint8(0x25);
713 EmitXmmRegisterOperand(dst, src);
714 }
715
716
717 void Assembler::pcmpeqq(XmmRegister dst, XmmRegister src) {
718 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
719 EmitUint8(0x66);
720 EmitUint8(0x0F);
721 EmitUint8(0x38);
722 EmitUint8(0x29);
723 EmitXmmRegisterOperand(dst, src);
724 }
725
726
677 void Assembler::fldl(const Address& src) { 727 void Assembler::fldl(const Address& src) {
678 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 728 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
679 EmitUint8(0xDD); 729 EmitUint8(0xDD);
680 EmitOperand(0, src); 730 EmitOperand(0, src);
681 } 731 }
682 732
683 733
684 void Assembler::fstpl(const Address& dst) { 734 void Assembler::fstpl(const Address& dst) {
685 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 735 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
686 EmitUint8(0xDD); 736 EmitUint8(0xDD);
(...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1841 1891
1842 const char* Assembler::XmmRegisterName(XmmRegister reg) { 1892 const char* Assembler::XmmRegisterName(XmmRegister reg) {
1843 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 1893 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
1844 return xmm_reg_names[reg]; 1894 return xmm_reg_names[reg];
1845 } 1895 }
1846 1896
1847 1897
1848 } // namespace dart 1898 } // namespace dart
1849 1899
1850 #endif // defined TARGET_ARCH_IA32 1900 #endif // defined TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698