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 c29f0301f6f073e9aa2daed435b514aeb55d094c..ca0174569dd662bd3af7853357b2401b5e8f593f 100644 |
--- a/src/compiler/arm/code-generator-arm.cc |
+++ b/src/compiler/arm/code-generator-arm.cc |
@@ -1664,15 +1664,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
i.InputSimd128Register(1)); |
break; |
} |
- case kArmSimd32x4Select: { |
- // Select is a ternary op, so we need to move one input into the |
- // destination. Use vtst to canonicalize the 'boolean' input #0. |
- __ vtst(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
- i.InputSimd128Register(0)); |
- __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), |
- i.InputSimd128Register(2)); |
- break; |
- } |
case kArmInt16x8Splat: { |
__ vdup(Neon16, i.OutputSimd128Register(), i.InputRegister(0)); |
break; |
@@ -1916,6 +1907,49 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
i.InputSimd128Register(1)); |
break; |
} |
+ case kArmSimd128And: { |
+ __ vand(i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmSimd128Or: { |
+ __ vorr(i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmSimd128Xor: { |
+ __ veor(i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(1)); |
+ break; |
+ } |
+ case kArmSimd128Not: { |
+ __ vmvn(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
+ break; |
+ } |
+ case kArmSimd32x4Select: { |
+ // Canonicalize input 0 lanes to all 0's or all 1's and move to dest. |
+ __ vtst(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(0)); |
+ __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), |
+ i.InputSimd128Register(2)); |
+ break; |
+ } |
+ case kArmSimd16x8Select: { |
+ // Canonicalize input 0 lanes to all 0's or all 1's and move to dest. |
+ __ vtst(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(0)); |
+ __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), |
+ i.InputSimd128Register(2)); |
+ break; |
+ } |
+ case kArmSimd8x16Select: { |
+ // Canonicalize input 0 lanes to all 0's or all 1's and move to dest. |
+ __ vtst(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
+ i.InputSimd128Register(0)); |
+ __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), |
+ i.InputSimd128Register(2)); |
+ break; |
+ } |
case kCheckedLoadInt8: |
ASSEMBLE_CHECKED_LOAD_INTEGER(ldrsb); |
break; |