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

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

Issue 1494323002: Revert "Precompilation/x64: Load float vector constants via Thread." (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « runtime/vm/assembler_arm64_test.cc ('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) 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" // NOLINT 5 #include "vm/globals.h" // NOLINT
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/cpu.h" 9 #include "vm/cpu.h"
10 #include "vm/heap.h" 10 #include "vm/heap.h"
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after
778 778
779 void Assembler::orps(XmmRegister dst, XmmRegister src) { 779 void Assembler::orps(XmmRegister dst, XmmRegister src) {
780 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 780 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
781 EmitREX_RB(dst, src); 781 EmitREX_RB(dst, src);
782 EmitUint8(0x0F); 782 EmitUint8(0x0F);
783 EmitUint8(0x56); 783 EmitUint8(0x56);
784 EmitXmmRegisterOperand(dst & 7, src); 784 EmitXmmRegisterOperand(dst & 7, src);
785 } 785 }
786 786
787 void Assembler::notps(XmmRegister dst) { 787 void Assembler::notps(XmmRegister dst) {
788 // { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF }; 788 static const struct ALIGN16 {
789 movq(TMP, Address(THR, Thread::float_not_address_offset())); 789 uint32_t a;
790 uint32_t b;
791 uint32_t c;
792 uint32_t d;
793 } float_not_constant =
794 { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF };
795 LoadImmediate(
796 TMP, Immediate(reinterpret_cast<intptr_t>(&float_not_constant)));
790 xorps(dst, Address(TMP, 0)); 797 xorps(dst, Address(TMP, 0));
791 } 798 }
792 799
793 800
794 void Assembler::negateps(XmmRegister dst) { 801 void Assembler::negateps(XmmRegister dst) {
795 // { 0x80000000, 0x80000000, 0x80000000, 0x80000000 } 802 static const struct ALIGN16 {
796 movq(TMP, Address(THR, Thread::float_negate_address_offset())); 803 uint32_t a;
804 uint32_t b;
805 uint32_t c;
806 uint32_t d;
807 } float_negate_constant =
808 { 0x80000000, 0x80000000, 0x80000000, 0x80000000 };
809 LoadImmediate(
810 TMP, Immediate(reinterpret_cast<intptr_t>(&float_negate_constant)));
797 xorps(dst, Address(TMP, 0)); 811 xorps(dst, Address(TMP, 0));
798 } 812 }
799 813
800 814
801 void Assembler::absps(XmmRegister dst) { 815 void Assembler::absps(XmmRegister dst) {
802 // { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF } 816 static const struct ALIGN16 {
803 movq(TMP, Address(THR, Thread::float_absolute_address_offset())); 817 uint32_t a;
818 uint32_t b;
819 uint32_t c;
820 uint32_t d;
821 } float_absolute_constant =
822 { 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF };
823 LoadImmediate(
824 TMP, Immediate(reinterpret_cast<intptr_t>(&float_absolute_constant)));
804 andps(dst, Address(TMP, 0)); 825 andps(dst, Address(TMP, 0));
805 } 826 }
806 827
807 828
808 void Assembler::zerowps(XmmRegister dst) { 829 void Assembler::zerowps(XmmRegister dst) {
809 // { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000 } 830 static const struct ALIGN16 {
810 movq(TMP, Address(THR, Thread::float_zerow_address_offset())); 831 uint32_t a;
832 uint32_t b;
833 uint32_t c;
834 uint32_t d;
835 } float_zerow_constant =
836 { 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000 };
837 LoadImmediate(
838 TMP, Immediate(reinterpret_cast<intptr_t>(&float_zerow_constant)));
811 andps(dst, Address(TMP, 0)); 839 andps(dst, Address(TMP, 0));
812 } 840 }
813 841
814 842
815 void Assembler::cmppseq(XmmRegister dst, XmmRegister src) { 843 void Assembler::cmppseq(XmmRegister dst, XmmRegister src) {
816 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 844 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
817 EmitREX_RB(dst, src); 845 EmitREX_RB(dst, src);
818 EmitUint8(0x0F); 846 EmitUint8(0x0F);
819 EmitUint8(0xC2); 847 EmitUint8(0xC2);
820 EmitXmmRegisterOperand(dst & 7, src); 848 EmitXmmRegisterOperand(dst & 7, src);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 ASSERT(dst <= XMM15); 1010 ASSERT(dst <= XMM15);
983 EmitUint8(0x66); 1011 EmitUint8(0x66);
984 EmitREX_RB(dst, src); 1012 EmitREX_RB(dst, src);
985 EmitUint8(0x0F); 1013 EmitUint8(0x0F);
986 EmitUint8(0x58); 1014 EmitUint8(0x58);
987 EmitXmmRegisterOperand(dst & 7, src); 1015 EmitXmmRegisterOperand(dst & 7, src);
988 } 1016 }
989 1017
990 1018
991 void Assembler::negatepd(XmmRegister dst) { 1019 void Assembler::negatepd(XmmRegister dst) {
992 // { 0x8000000000000000LL, 0x8000000000000000LL } 1020 static const struct ALIGN16 {
993 movq(TMP, Address(THR, Thread::double_negate_address_offset())); 1021 uint64_t a;
1022 uint64_t b;
1023 } double_negate_constant =
1024 { 0x8000000000000000LL, 0x8000000000000000LL };
1025 LoadImmediate(
1026 TMP, Immediate(reinterpret_cast<intptr_t>(&double_negate_constant)));
994 xorpd(dst, Address(TMP, 0)); 1027 xorpd(dst, Address(TMP, 0));
995 } 1028 }
996 1029
997 1030
998 void Assembler::subpd(XmmRegister dst, XmmRegister src) { 1031 void Assembler::subpd(XmmRegister dst, XmmRegister src) {
999 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1032 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1000 ASSERT(src <= XMM15); 1033 ASSERT(src <= XMM15);
1001 ASSERT(dst <= XMM15); 1034 ASSERT(dst <= XMM15);
1002 EmitUint8(0x66); 1035 EmitUint8(0x66);
1003 EmitREX_RB(dst, src); 1036 EmitREX_RB(dst, src);
(...skipping 21 matching lines...) Expand all
1025 ASSERT(dst <= XMM15); 1058 ASSERT(dst <= XMM15);
1026 EmitUint8(0x66); 1059 EmitUint8(0x66);
1027 EmitREX_RB(dst, src); 1060 EmitREX_RB(dst, src);
1028 EmitUint8(0x0F); 1061 EmitUint8(0x0F);
1029 EmitUint8(0x5E); 1062 EmitUint8(0x5E);
1030 EmitXmmRegisterOperand(dst & 7, src); 1063 EmitXmmRegisterOperand(dst & 7, src);
1031 } 1064 }
1032 1065
1033 1066
1034 void Assembler::abspd(XmmRegister dst) { 1067 void Assembler::abspd(XmmRegister dst) {
1035 // { 0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL } 1068 static const struct ALIGN16 {
1036 movq(TMP, Address(THR, Thread::double_abs_address_offset())); 1069 uint64_t a;
1070 uint64_t b;
1071 } double_absolute_const =
1072 { 0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL };
1073 LoadImmediate(
1074 TMP, Immediate(reinterpret_cast<intptr_t>(&double_absolute_const)));
1037 andpd(dst, Address(TMP, 0)); 1075 andpd(dst, Address(TMP, 0));
1038 } 1076 }
1039 1077
1040 1078
1041 void Assembler::minpd(XmmRegister dst, XmmRegister src) { 1079 void Assembler::minpd(XmmRegister dst, XmmRegister src) {
1042 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1080 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1043 ASSERT(src <= XMM15); 1081 ASSERT(src <= XMM15);
1044 ASSERT(dst <= XMM15); 1082 ASSERT(dst <= XMM15);
1045 EmitUint8(0x66); 1083 EmitUint8(0x66);
1046 EmitREX_RB(dst, src); 1084 EmitREX_RB(dst, src);
(...skipping 2068 matching lines...) Expand 10 before | Expand all | Expand 10 after
3115 Register temp = RCX; 3153 Register temp = RCX;
3116 pushq(temp); 3154 pushq(temp);
3117 leaq(temp, dest); 3155 leaq(temp, dest);
3118 addq(Address(temp, VerifiedMemory::offset()), inc_imm); 3156 addq(Address(temp, VerifiedMemory::offset()), inc_imm);
3119 popq(temp); 3157 popq(temp);
3120 } 3158 }
3121 } 3159 }
3122 3160
3123 3161
3124 void Assembler::DoubleNegate(XmmRegister d) { 3162 void Assembler::DoubleNegate(XmmRegister d) {
3125 // {0x8000000000000000LL, 0x8000000000000000LL} 3163 static const struct ALIGN16 {
3126 movq(TMP, Address(THR, Thread::double_negate_address_offset())); 3164 uint64_t a;
3165 uint64_t b;
3166 } double_negate_constant =
3167 {0x8000000000000000LL, 0x8000000000000000LL};
3168 LoadImmediate(
3169 TMP, Immediate(reinterpret_cast<intptr_t>(&double_negate_constant)));
3127 xorpd(d, Address(TMP, 0)); 3170 xorpd(d, Address(TMP, 0));
3128 } 3171 }
3129 3172
3130 3173
3131 void Assembler::DoubleAbs(XmmRegister reg) { 3174 void Assembler::DoubleAbs(XmmRegister reg) {
3132 // {0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL} 3175 static const struct ALIGN16 {
3133 movq(TMP, Address(THR, Thread::double_abs_address_offset())); 3176 uint64_t a;
3177 uint64_t b;
3178 } double_abs_constant =
3179 {0x7FFFFFFFFFFFFFFFLL, 0x7FFFFFFFFFFFFFFFLL};
3180 LoadImmediate(TMP,
3181 Immediate(reinterpret_cast<intptr_t>(&double_abs_constant)));
3134 andpd(reg, Address(TMP, 0)); 3182 andpd(reg, Address(TMP, 0));
3135 } 3183 }
3136 3184
3137 3185
3138 void Assembler::Stop(const char* message, bool fixed_length_encoding) { 3186 void Assembler::Stop(const char* message, bool fixed_length_encoding) {
3139 int64_t message_address = reinterpret_cast<int64_t>(message); 3187 int64_t message_address = reinterpret_cast<int64_t>(message);
3140 if (FLAG_print_stop_message) { 3188 if (FLAG_print_stop_message) {
3141 pushq(TMP); // Preserve TMP register. 3189 pushq(TMP); // Preserve TMP register.
3142 pushq(RDI); // Preserve RDI register. 3190 pushq(RDI); // Preserve RDI register.
3143 if (fixed_length_encoding) { 3191 if (fixed_length_encoding) {
(...skipping 771 matching lines...) Expand 10 before | Expand all | Expand 10 after
3915 3963
3916 3964
3917 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3965 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3918 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); 3966 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters));
3919 return xmm_reg_names[reg]; 3967 return xmm_reg_names[reg];
3920 } 3968 }
3921 3969
3922 } // namespace dart 3970 } // namespace dart
3923 3971
3924 #endif // defined TARGET_ARCH_X64 3972 #endif // defined TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « runtime/vm/assembler_arm64_test.cc ('k') | runtime/vm/assembler_x64_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698