OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ | 5 #ifndef V8_X64_MACRO_ASSEMBLER_X64_H_ |
6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ | 6 #define V8_X64_MACRO_ASSEMBLER_X64_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
10 #include "src/base/flags.h" | 10 #include "src/base/flags.h" |
(...skipping 886 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 DCHECK(value->IsHeapObject()); | 897 DCHECK(value->IsHeapObject()); |
898 DCHECK(!isolate()->heap()->InNewSpace(*value)); | 898 DCHECK(!isolate()->heap()->InNewSpace(*value)); |
899 movp(dst, reinterpret_cast<void*>(value.location()), rmode); | 899 movp(dst, reinterpret_cast<void*>(value.location()), rmode); |
900 } | 900 } |
901 | 901 |
902 void Move(XMMRegister dst, uint32_t src); | 902 void Move(XMMRegister dst, uint32_t src); |
903 void Move(XMMRegister dst, uint64_t src); | 903 void Move(XMMRegister dst, uint64_t src); |
904 void Move(XMMRegister dst, float src) { Move(dst, bit_cast<uint32_t>(src)); } | 904 void Move(XMMRegister dst, float src) { Move(dst, bit_cast<uint32_t>(src)); } |
905 void Move(XMMRegister dst, double src) { Move(dst, bit_cast<uint64_t>(src)); } | 905 void Move(XMMRegister dst, double src) { Move(dst, bit_cast<uint64_t>(src)); } |
906 | 906 |
| 907 #define AVX_OP2_WITH_TYPE(macro_name, name, src_type) \ |
| 908 void macro_name(XMMRegister dst, src_type src) { \ |
| 909 if (CpuFeatures::IsSupported(AVX)) { \ |
| 910 CpuFeatureScope scope(this, AVX); \ |
| 911 v##name(dst, dst, src); \ |
| 912 } else { \ |
| 913 name(dst, src); \ |
| 914 } \ |
| 915 } |
| 916 #define AVX_OP2_X(macro_name, name) \ |
| 917 AVX_OP2_WITH_TYPE(macro_name, name, XMMRegister) |
| 918 #define AVX_OP2_O(macro_name, name) \ |
| 919 AVX_OP2_WITH_TYPE(macro_name, name, const Operand&) |
| 920 #define AVX_OP2_XO(macro_name, name) \ |
| 921 AVX_OP2_X(macro_name, name) \ |
| 922 AVX_OP2_O(macro_name, name) |
| 923 |
| 924 AVX_OP2_XO(Addsd, addsd) |
| 925 AVX_OP2_XO(Subsd, subsd) |
| 926 AVX_OP2_XO(Mulsd, mulsd) |
| 927 AVX_OP2_XO(Divsd, divsd) |
| 928 AVX_OP2_X(Andpd, andpd) |
| 929 AVX_OP2_X(Orpd, orpd) |
| 930 AVX_OP2_X(Xorpd, xorpd) |
| 931 AVX_OP2_X(Pcmpeqd, pcmpeqd) |
| 932 AVX_OP2_WITH_TYPE(Psllq, psllq, byte) |
| 933 AVX_OP2_WITH_TYPE(Psrlq, psrlq, byte) |
| 934 |
| 935 #undef AVX_OP2_O |
| 936 #undef AVX_OP2_X |
| 937 #undef AVX_OP2_XO |
| 938 #undef AVX_OP2_WITH_TYPE |
| 939 |
907 void Movsd(XMMRegister dst, XMMRegister src); | 940 void Movsd(XMMRegister dst, XMMRegister src); |
908 void Movsd(XMMRegister dst, const Operand& src); | 941 void Movsd(XMMRegister dst, const Operand& src); |
909 void Movsd(const Operand& dst, XMMRegister src); | 942 void Movsd(const Operand& dst, XMMRegister src); |
910 void Movss(XMMRegister dst, XMMRegister src); | 943 void Movss(XMMRegister dst, XMMRegister src); |
911 void Movss(XMMRegister dst, const Operand& src); | 944 void Movss(XMMRegister dst, const Operand& src); |
912 void Movss(const Operand& dst, XMMRegister src); | 945 void Movss(const Operand& dst, XMMRegister src); |
913 | 946 |
914 void Movd(XMMRegister dst, Register src); | 947 void Movd(XMMRegister dst, Register src); |
915 void Movd(XMMRegister dst, const Operand& src); | 948 void Movd(XMMRegister dst, const Operand& src); |
916 void Movd(Register dst, XMMRegister src); | 949 void Movd(Register dst, XMMRegister src); |
917 void Movq(XMMRegister dst, Register src); | 950 void Movq(XMMRegister dst, Register src); |
918 void Movq(Register dst, XMMRegister src); | 951 void Movq(Register dst, XMMRegister src); |
919 | 952 |
920 void Movaps(XMMRegister dst, XMMRegister src); | 953 void Movaps(XMMRegister dst, XMMRegister src); |
921 void Movapd(XMMRegister dst, XMMRegister src); | 954 void Movapd(XMMRegister dst, XMMRegister src); |
922 void Movmskpd(Register dst, XMMRegister src); | 955 void Movmskpd(Register dst, XMMRegister src); |
923 | 956 |
924 void Roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); | 957 void Roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); |
925 void Sqrtsd(XMMRegister dst, XMMRegister src); | 958 void Sqrtsd(XMMRegister dst, XMMRegister src); |
926 void Sqrtsd(XMMRegister dst, const Operand& src); | 959 void Sqrtsd(XMMRegister dst, const Operand& src); |
927 | 960 |
928 void Ucomiss(XMMRegister src1, XMMRegister src2); | 961 void Ucomiss(XMMRegister src1, XMMRegister src2); |
929 void Ucomiss(XMMRegister src1, const Operand& src2); | 962 void Ucomiss(XMMRegister src1, const Operand& src2); |
930 void Ucomisd(XMMRegister src1, XMMRegister src2); | 963 void Ucomisd(XMMRegister src1, XMMRegister src2); |
931 void Ucomisd(XMMRegister src1, const Operand& src2); | 964 void Ucomisd(XMMRegister src1, const Operand& src2); |
932 | 965 |
933 void Andpd(XMMRegister dst, XMMRegister src); | |
934 void Orpd(XMMRegister dst, XMMRegister src); | |
935 void Xorpd(XMMRegister dst, XMMRegister src); | |
936 void Pcmpeqd(XMMRegister dst, XMMRegister src); | |
937 void Psllq(XMMRegister dst, byte imm8); | |
938 void Psrlq(XMMRegister dst, byte imm8); | |
939 | |
940 // Control Flow | 966 // Control Flow |
941 void Jump(Address destination, RelocInfo::Mode rmode); | 967 void Jump(Address destination, RelocInfo::Mode rmode); |
942 void Jump(ExternalReference ext); | 968 void Jump(ExternalReference ext); |
943 void Jump(const Operand& op); | 969 void Jump(const Operand& op); |
944 void Jump(Handle<Code> code_object, RelocInfo::Mode rmode); | 970 void Jump(Handle<Code> code_object, RelocInfo::Mode rmode); |
945 | 971 |
946 void Call(Address destination, RelocInfo::Mode rmode); | 972 void Call(Address destination, RelocInfo::Mode rmode); |
947 void Call(ExternalReference ext); | 973 void Call(ExternalReference ext); |
948 void Call(const Operand& op); | 974 void Call(const Operand& op); |
949 void Call(Handle<Code> code_object, | 975 void Call(Handle<Code> code_object, |
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1686 } \ | 1712 } \ |
1687 masm-> | 1713 masm-> |
1688 #else | 1714 #else |
1689 #define ACCESS_MASM(masm) masm-> | 1715 #define ACCESS_MASM(masm) masm-> |
1690 #endif | 1716 #endif |
1691 | 1717 |
1692 } // namespace internal | 1718 } // namespace internal |
1693 } // namespace v8 | 1719 } // namespace v8 |
1694 | 1720 |
1695 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ | 1721 #endif // V8_X64_MACRO_ASSEMBLER_X64_H_ |
OLD | NEW |