| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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/code_generator.h" | 9 #include "vm/code_generator.h" |
| 10 #include "vm/heap.h" | 10 #include "vm/heap.h" |
| (...skipping 851 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 void Assembler::shufps(XmmRegister dst, XmmRegister src, const Immediate& imm) { | 862 void Assembler::shufps(XmmRegister dst, XmmRegister src, const Immediate& imm) { |
| 863 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 863 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 864 EmitUint8(0x0F); | 864 EmitUint8(0x0F); |
| 865 EmitUint8(0xC6); | 865 EmitUint8(0xC6); |
| 866 EmitXmmRegisterOperand(dst, src); | 866 EmitXmmRegisterOperand(dst, src); |
| 867 ASSERT(imm.is_uint8()); | 867 ASSERT(imm.is_uint8()); |
| 868 EmitUint8(imm.value()); | 868 EmitUint8(imm.value()); |
| 869 } | 869 } |
| 870 | 870 |
| 871 | 871 |
| 872 void Assembler::addpd(XmmRegister dst, XmmRegister src) { |
| 873 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 874 EmitUint8(0x66); |
| 875 EmitUint8(0x0F); |
| 876 EmitUint8(0x58); |
| 877 EmitXmmRegisterOperand(dst, src); |
| 878 } |
| 879 |
| 880 |
| 881 void Assembler::negatepd(XmmRegister dst) { |
| 882 static const struct ALIGN16 { |
| 883 uint64_t a; |
| 884 uint64_t b; |
| 885 } double_negate_constant = |
| 886 { 0x8000000000000000LL, 0x8000000000000000LL }; |
| 887 xorpd(dst, |
| 888 Address::Absolute(reinterpret_cast<uword>(&double_negate_constant))); |
| 889 } |
| 890 |
| 891 |
| 892 void Assembler::subpd(XmmRegister dst, XmmRegister src) { |
| 893 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 894 EmitUint8(0x66); |
| 895 EmitUint8(0x0F); |
| 896 EmitUint8(0x5C); |
| 897 EmitXmmRegisterOperand(dst, src); |
| 898 } |
| 899 |
| 900 |
| 901 void Assembler::mulpd(XmmRegister dst, XmmRegister src) { |
| 902 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 903 EmitUint8(0x66); |
| 904 EmitUint8(0x0F); |
| 905 EmitUint8(0x59); |
| 906 EmitXmmRegisterOperand(dst, src); |
| 907 } |
| 908 |
| 909 |
| 910 void Assembler::divpd(XmmRegister dst, XmmRegister src) { |
| 911 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 912 EmitUint8(0x66); |
| 913 EmitUint8(0x0F); |
| 914 EmitUint8(0x5E); |
| 915 EmitXmmRegisterOperand(dst, src); |
| 916 } |
| 917 |
| 918 |
| 919 void Assembler::abspd(XmmRegister dst) { |
| 920 static const struct ALIGN16 { |
| 921 uint64_t a; |
| 922 uint64_t b; |
| 923 } double_absolute_constant = |
| 924 { 0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL }; |
| 925 andpd(dst, |
| 926 Address::Absolute(reinterpret_cast<uword>(&double_absolute_constant))); |
| 927 } |
| 928 |
| 929 |
| 930 void Assembler::minpd(XmmRegister dst, XmmRegister src) { |
| 931 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 932 EmitUint8(0x66); |
| 933 EmitUint8(0x0F); |
| 934 EmitUint8(0x5D); |
| 935 EmitXmmRegisterOperand(dst, src); |
| 936 } |
| 937 |
| 938 |
| 939 void Assembler::maxpd(XmmRegister dst, XmmRegister src) { |
| 940 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 941 EmitUint8(0x66); |
| 942 EmitUint8(0x0F); |
| 943 EmitUint8(0x5F); |
| 944 EmitXmmRegisterOperand(dst, src); |
| 945 } |
| 946 |
| 947 |
| 948 void Assembler::sqrtpd(XmmRegister dst) { |
| 949 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 950 EmitUint8(0x66); |
| 951 EmitUint8(0x0F); |
| 952 EmitUint8(0x51); |
| 953 EmitXmmRegisterOperand(dst, dst); |
| 954 } |
| 955 |
| 956 |
| 957 void Assembler::cvtps2pd(XmmRegister dst, XmmRegister src) { |
| 958 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 959 EmitUint8(0x0F); |
| 960 EmitUint8(0x5A); |
| 961 EmitXmmRegisterOperand(dst, src); |
| 962 } |
| 963 |
| 964 |
| 965 void Assembler::cvtpd2ps(XmmRegister dst, XmmRegister src) { |
| 966 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 967 EmitUint8(0x66); |
| 968 EmitUint8(0x0F); |
| 969 EmitUint8(0x5A); |
| 970 EmitXmmRegisterOperand(dst, src); |
| 971 } |
| 972 |
| 973 |
| 872 void Assembler::subsd(XmmRegister dst, XmmRegister src) { | 974 void Assembler::subsd(XmmRegister dst, XmmRegister src) { |
| 873 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 975 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 874 EmitUint8(0xF2); | 976 EmitUint8(0xF2); |
| 875 EmitUint8(0x0F); | 977 EmitUint8(0x0F); |
| 876 EmitUint8(0x5C); | 978 EmitUint8(0x5C); |
| 877 EmitXmmRegisterOperand(dst, src); | 979 EmitXmmRegisterOperand(dst, src); |
| 878 } | 980 } |
| 879 | 981 |
| 880 | 982 |
| 881 void Assembler::subsd(XmmRegister dst, const Address& src) { | 983 void Assembler::subsd(XmmRegister dst, const Address& src) { |
| (...skipping 1714 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2596 | 2698 |
| 2597 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 2699 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 2598 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 2700 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
| 2599 return xmm_reg_names[reg]; | 2701 return xmm_reg_names[reg]; |
| 2600 } | 2702 } |
| 2601 | 2703 |
| 2602 | 2704 |
| 2603 } // namespace dart | 2705 } // namespace dart |
| 2604 | 2706 |
| 2605 #endif // defined TARGET_ARCH_IA32 | 2707 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |