Index: runtime/vm/intermediate_language_ia32.cc |
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc |
index b2c3e55beb17d97e0e843bfda45ed9205510993c..ba9703624251ffbf9f56c442f26d99bf03661d7d 100644 |
--- a/runtime/vm/intermediate_language_ia32.cc |
+++ b/runtime/vm/intermediate_language_ia32.cc |
@@ -3135,7 +3135,7 @@ void BinaryFloat32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
-LocationSummary* Float32x4ShuffleInstr::MakeLocationSummary() const { |
+LocationSummary* Simd32x4ShuffleInstr::MakeLocationSummary() const { |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 0; |
LocationSummary* summary = |
@@ -3146,7 +3146,7 @@ LocationSummary* Float32x4ShuffleInstr::MakeLocationSummary() const { |
} |
-void Float32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
+void Simd32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
XmmRegister value = locs()->in(0).fpu_reg(); |
ASSERT(locs()->out().fpu_reg() == value); |
@@ -3169,6 +3169,7 @@ void Float32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ cvtss2sd(value, value); |
break; |
case MethodRecognizer::kFloat32x4Shuffle: |
+ case MethodRecognizer::kUint32x4Shuffle: |
__ shufps(value, value, Immediate(mask_)); |
break; |
default: UNREACHABLE(); |
@@ -3176,6 +3177,33 @@ void Float32x4ShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
+LocationSummary* Simd32x4ShuffleMixInstr::MakeLocationSummary() const { |
+ const intptr_t kNumInputs = 2; |
+ const intptr_t kNumTemps = 0; |
+ LocationSummary* summary = |
+ new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
+ summary->set_in(0, Location::RequiresFpuRegister()); |
+ summary->set_in(1, Location::RequiresFpuRegister()); |
+ summary->set_out(Location::SameAsFirstInput()); |
+ return summary; |
+} |
+ |
+ |
+void Simd32x4ShuffleMixInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
+ XmmRegister left = locs()->in(0).fpu_reg(); |
+ XmmRegister right = locs()->in(1).fpu_reg(); |
+ |
+ ASSERT(locs()->out().fpu_reg() == left); |
+ switch (op_kind()) { |
+ case MethodRecognizer::kFloat32x4ShuffleMix: |
+ case MethodRecognizer::kUint32x4ShuffleMix: |
+ __ shufps(left, right, Immediate(mask_)); |
+ break; |
+ default: UNREACHABLE(); |
+ } |
+} |
+ |
+ |
LocationSummary* Simd32x4GetSignMaskInstr::MakeLocationSummary() const { |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 0; |
@@ -3537,45 +3565,6 @@ void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
} |
-LocationSummary* Float32x4TwoArgShuffleInstr::MakeLocationSummary() const { |
- const intptr_t kNumInputs = 2; |
- const intptr_t kNumTemps = 0; |
- LocationSummary* summary = |
- new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
- summary->set_in(0, Location::RequiresFpuRegister()); |
- summary->set_in(1, Location::RequiresFpuRegister()); |
- summary->set_out(Location::SameAsFirstInput()); |
- return summary; |
-} |
- |
- |
-void Float32x4TwoArgShuffleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
- XmmRegister left = locs()->in(0).fpu_reg(); |
- XmmRegister right = locs()->in(1).fpu_reg(); |
- |
- ASSERT(locs()->out().fpu_reg() == left); |
- |
- switch (op_kind()) { |
- case MethodRecognizer::kFloat32x4WithZWInXY: |
- __ movhlps(left, right); |
- break; |
- case MethodRecognizer::kFloat32x4InterleaveXY: |
- __ unpcklps(left, right); |
- break; |
- case MethodRecognizer::kFloat32x4InterleaveZW: |
- __ unpckhps(left, right); |
- break; |
- case MethodRecognizer::kFloat32x4InterleaveXYPairs: |
- __ unpcklpd(left, right); |
- break; |
- case MethodRecognizer::kFloat32x4InterleaveZWPairs: |
- __ unpckhpd(left, right); |
- break; |
- default: UNREACHABLE(); |
- } |
-} |
- |
- |
LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const { |
const intptr_t kNumInputs = 4; |
const intptr_t kNumTemps = 0; |