Index: src/compiler/arm/code-generator-arm.cc |
diff --git a/src/compiler/arm/code-generator-arm.cc b/src/compiler/arm/code-generator-arm.cc |
index a474220630d423672bbbf1a93efc25348efdd0fe..b9f825123aa9888346c3f9fb75e3d77b4b02d093 100644 |
--- a/src/compiler/arm/code-generator-arm.cc |
+++ b/src/compiler/arm/code-generator-arm.cc |
@@ -1582,6 +1582,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ vneg(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
break; |
} |
+ case kArmInt32x4ShiftLeftByScalar: { |
+ __ vshl(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt5(1)); |
+ break; |
+ } |
+ case kArmInt32x4ShiftRightByScalar: { |
+ __ vshr(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt5(1)); |
+ break; |
+ } |
case kArmInt32x4Add: { |
__ vadd(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
@@ -1630,6 +1640,21 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmUint32x4ShiftRightByScalar: { |
+ __ vshr(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt5(1)); |
+ break; |
+ } |
+ case kArmUint32x4Min: { |
+ __ vmin(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint32x4Max: { |
+ __ vmax(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmUint32x4GreaterThan: { |
__ vcgt(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
@@ -1668,16 +1693,36 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ vneg(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
break; |
} |
+ case kArmInt16x8ShiftLeftByScalar: { |
+ __ vshl(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt4(1)); |
+ break; |
+ } |
+ case kArmInt16x8ShiftRightByScalar: { |
+ __ vshr(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt4(1)); |
+ break; |
+ } |
case kArmInt16x8Add: { |
__ vadd(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmInt16x8AddSaturate: { |
+ __ vqadd(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmInt16x8Sub: { |
__ vsub(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmInt16x8SubSaturate: { |
+ __ vqsub(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmInt16x8Mul: { |
__ vmul(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
@@ -1716,6 +1761,31 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmUint16x8ShiftRightByScalar: { |
+ __ vshr(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt4(1)); |
+ break; |
+ } |
+ case kArmUint16x8AddSaturate: { |
+ __ vqadd(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint16x8SubSaturate: { |
+ __ vqsub(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint16x8Min: { |
+ __ vmin(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint16x8Max: { |
+ __ vmax(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmUint16x8GreaterThan: { |
__ vcgt(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
@@ -1745,16 +1815,36 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
__ vneg(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
break; |
} |
+ case kArmInt8x16ShiftLeftByScalar: { |
+ __ vshl(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt3(1)); |
+ break; |
+ } |
+ case kArmInt8x16ShiftRightByScalar: { |
+ __ vshr(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt3(1)); |
+ break; |
+ } |
case kArmInt8x16Add: { |
__ vadd(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmInt8x16AddSaturate: { |
+ __ vqadd(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmInt8x16Sub: { |
__ vsub(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmInt8x16SubSaturate: { |
+ __ vqsub(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmInt8x16Mul: { |
__ vmul(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |
@@ -1792,6 +1882,31 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmUint8x16ShiftRightByScalar: { |
+ __ vshr(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputInt3(1)); |
+ break; |
+ } |
+ case kArmUint8x16AddSaturate: { |
+ __ vqadd(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint8x16SubSaturate: { |
+ __ vqsub(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint8x16Min: { |
+ __ vmin(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmUint8x16Max: { |
+ __ vmax(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
case kArmUint8x16GreaterThan: { |
__ vcgt(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
i.InputSimd128Register(1)); |