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

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

Issue 183923026: Inline of Float64x2 operations round 1 (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 9 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
« no previous file with comments | « runtime/vm/intermediate_language_arm.cc ('k') | runtime/vm/intermediate_language_mips.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" // Needed here to get TARGET_ARCH_IA32. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32.
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 3386 matching lines...) Expand 10 before | Expand all | Expand 10 after
3397 switch (op_kind()) { 3397 switch (op_kind()) {
3398 case Token::kADD: __ addps(left, right); break; 3398 case Token::kADD: __ addps(left, right); break;
3399 case Token::kSUB: __ subps(left, right); break; 3399 case Token::kSUB: __ subps(left, right); break;
3400 case Token::kMUL: __ mulps(left, right); break; 3400 case Token::kMUL: __ mulps(left, right); break;
3401 case Token::kDIV: __ divps(left, right); break; 3401 case Token::kDIV: __ divps(left, right); break;
3402 default: UNREACHABLE(); 3402 default: UNREACHABLE();
3403 } 3403 }
3404 } 3404 }
3405 3405
3406 3406
3407 LocationSummary* BinaryFloat64x2OpInstr::MakeLocationSummary(bool opt) const {
3408 const intptr_t kNumInputs = 2;
3409 const intptr_t kNumTemps = 0;
3410 LocationSummary* summary =
3411 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3412 summary->set_in(0, Location::RequiresFpuRegister());
3413 summary->set_in(1, Location::RequiresFpuRegister());
3414 summary->set_out(Location::SameAsFirstInput());
3415 return summary;
3416 }
3417
3418
3419 void BinaryFloat64x2OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3420 XmmRegister left = locs()->in(0).fpu_reg();
3421 XmmRegister right = locs()->in(1).fpu_reg();
3422
3423 ASSERT(locs()->out().fpu_reg() == left);
3424
3425 switch (op_kind()) {
3426 case Token::kADD: __ addpd(left, right); break;
3427 case Token::kSUB: __ subpd(left, right); break;
3428 case Token::kMUL: __ mulpd(left, right); break;
3429 case Token::kDIV: __ divpd(left, right); break;
3430 default: UNREACHABLE();
3431 }
3432 }
3433
3434
3407 LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const { 3435 LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary(bool opt) const {
3408 const intptr_t kNumInputs = 1; 3436 const intptr_t kNumInputs = 1;
3409 const intptr_t kNumTemps = 0; 3437 const intptr_t kNumTemps = 0;
3410 LocationSummary* summary = 3438 LocationSummary* summary =
3411 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); 3439 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3412 summary->set_in(0, Location::RequiresFpuRegister()); 3440 summary->set_in(0, Location::RequiresFpuRegister());
3413 summary->set_out(Location::SameAsFirstInput()); 3441 summary->set_out(Location::SameAsFirstInput());
3414 return summary; 3442 return summary;
3415 } 3443 }
3416 3444
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
3828 summary->set_out(Location::SameAsFirstInput()); 3856 summary->set_out(Location::SameAsFirstInput());
3829 return summary; 3857 return summary;
3830 } 3858 }
3831 3859
3832 3860
3833 void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { 3861 void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
3834 // NOP. 3862 // NOP.
3835 } 3863 }
3836 3864
3837 3865
3866 LocationSummary* Simd64x2ShuffleInstr::MakeLocationSummary(bool opt) const {
3867 const intptr_t kNumInputs = 1;
3868 const intptr_t kNumTemps = 0;
3869 LocationSummary* summary =
3870 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3871 summary->set_in(0, Location::RequiresFpuRegister());
3872 summary->set_out(Location::SameAsFirstInput());
3873 return summary;
3874 }
3875
3876
3877 void Simd64x2ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3878 XmmRegister value = locs()->in(0).fpu_reg();
3879
3880 ASSERT(locs()->out().fpu_reg() == value);
3881
3882 switch (op_kind()) {
3883 case MethodRecognizer::kFloat64x2GetX:
3884 __ shufpd(value, value, Immediate(0x00));
3885 break;
3886 case MethodRecognizer::kFloat64x2GetY:
3887 __ shufpd(value, value, Immediate(0x33));
3888 break;
3889 default: UNREACHABLE();
3890 }
3891 }
3892
3893
3894
3895 LocationSummary* Float64x2ZeroInstr::MakeLocationSummary(bool opt) const {
3896 const intptr_t kNumInputs = 0;
3897 const intptr_t kNumTemps = 0;
3898 LocationSummary* summary =
3899 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3900 summary->set_out(Location::RequiresFpuRegister());
3901 return summary;
3902 }
3903
3904
3905 void Float64x2ZeroInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3906 XmmRegister value = locs()->out().fpu_reg();
3907 __ xorpd(value, value);
3908 }
3909
3910
3911 LocationSummary* Float64x2SplatInstr::MakeLocationSummary(bool opt) const {
3912 const intptr_t kNumInputs = 1;
3913 const intptr_t kNumTemps = 0;
3914 LocationSummary* summary =
3915 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3916 summary->set_in(0, Location::RequiresFpuRegister());
3917 summary->set_out(Location::SameAsFirstInput());
3918 return summary;
3919 }
3920
3921
3922 void Float64x2SplatInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3923 XmmRegister value = locs()->out().fpu_reg();
3924 __ shufpd(value, value, Immediate(0x0));
3925 }
3926
3927
3928 LocationSummary* Float64x2ConstructorInstr::MakeLocationSummary(
3929 bool opt) const {
3930 const intptr_t kNumInputs = 2;
3931 const intptr_t kNumTemps = 0;
3932 LocationSummary* summary =
3933 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3934 summary->set_in(0, Location::RequiresFpuRegister());
3935 summary->set_in(1, Location::RequiresFpuRegister());
3936 summary->set_out(Location::SameAsFirstInput());
3937 return summary;
3938 }
3939
3940
3941 void Float64x2ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
3942 XmmRegister v0 = locs()->in(0).fpu_reg();
3943 XmmRegister v1 = locs()->in(1).fpu_reg();
3944 ASSERT(v0 == locs()->out().fpu_reg());
3945 __ subl(ESP, Immediate(16));
3946 __ movsd(Address(ESP, 0), v0);
3947 __ movsd(Address(ESP, 8), v1);
3948 __ movups(v0, Address(ESP, 0));
3949 __ addl(ESP, Immediate(16));
3950 }
3951
3952
3953 LocationSummary* Float64x2ToFloat32x4Instr::MakeLocationSummary(
3954 bool opt) const {
3955 const intptr_t kNumInputs = 1;
3956 const intptr_t kNumTemps = 0;
3957 LocationSummary* summary =
3958 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3959 summary->set_in(0, Location::RequiresFpuRegister());
3960 summary->set_out(Location::SameAsFirstInput());
3961 return summary;
3962 }
3963
3964
3965 void Float64x2ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
3966 XmmRegister value = locs()->out().fpu_reg();
3967 __ cvtpd2ps(value, value);
3968 }
3969
3970
3971 LocationSummary* Float32x4ToFloat64x2Instr::MakeLocationSummary(
3972 bool opt) const {
3973 const intptr_t kNumInputs = 1;
3974 const intptr_t kNumTemps = 0;
3975 LocationSummary* summary =
3976 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3977 summary->set_in(0, Location::RequiresFpuRegister());
3978 summary->set_out(Location::SameAsFirstInput());
3979 return summary;
3980 }
3981
3982
3983 void Float32x4ToFloat64x2Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
3984 XmmRegister value = locs()->out().fpu_reg();
3985 __ cvtps2pd(value, value);
3986 }
3987
3988
3838 LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary( 3989 LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary(
3839 bool opt) const { 3990 bool opt) const {
3840 const intptr_t kNumInputs = 4; 3991 const intptr_t kNumInputs = 4;
3841 const intptr_t kNumTemps = 0; 3992 const intptr_t kNumTemps = 0;
3842 LocationSummary* summary = 3993 LocationSummary* summary =
3843 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); 3994 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
3844 summary->set_in(0, Location::RequiresRegister()); 3995 summary->set_in(0, Location::RequiresRegister());
3845 summary->set_in(1, Location::RequiresRegister()); 3996 summary->set_in(1, Location::RequiresRegister());
3846 summary->set_in(2, Location::RequiresRegister()); 3997 summary->set_in(2, Location::RequiresRegister());
3847 summary->set_in(3, Location::RequiresRegister()); 3998 summary->set_in(3, Location::RequiresRegister());
(...skipping 1639 matching lines...) Expand 10 before | Expand all | Expand 10 after
5487 PcDescriptors::kOther, 5638 PcDescriptors::kOther,
5488 locs()); 5639 locs());
5489 __ Drop(ArgumentCount()); // Discard arguments. 5640 __ Drop(ArgumentCount()); // Discard arguments.
5490 } 5641 }
5491 5642
5492 } // namespace dart 5643 } // namespace dart
5493 5644
5494 #undef __ 5645 #undef __
5495 5646
5496 #endif // defined TARGET_ARCH_IA32 5647 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/intermediate_language_arm.cc ('k') | runtime/vm/intermediate_language_mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698