| 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 a74a4231ba38a3c0141b06c7de76c53294bba02a..3315c7bceb01e2ccabda4f5d3be7f04cd750b836 100644
|
| --- a/src/compiler/arm/code-generator-arm.cc
|
| +++ b/src/compiler/arm/code-generator-arm.cc
|
| @@ -340,14 +340,6 @@ Condition FlagsConditionToCondition(FlagsCondition condition) {
|
| UNREACHABLE();
|
| }
|
|
|
| -int GetVtblTableSize(const Simd128Register& src0, const Simd128Register& src1) {
|
| - // If unary shuffle, table is src0 (2 d-registers).
|
| - if (src0.is(src1)) return 2;
|
| - // Binary shuffle, table is src0, src1. They must be consecutive
|
| - DCHECK_EQ(src0.code() + 1, src1.code());
|
| - return 4; // 4 d-registers.
|
| -}
|
| -
|
| } // namespace
|
|
|
| #define ASSEMBLE_CHECKED_LOAD_FP(Type) \
|
| @@ -2291,39 +2283,6 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| __ vtrn(Neon16, kScratchQuadReg, dst); // dst = [1, 9, 3, 11, ... 15]
|
| break;
|
| }
|
| - case kArmS16x8Shuffle: {
|
| - Simd128Register dst = i.OutputSimd128Register(),
|
| - src0 = i.InputSimd128Register(0),
|
| - src1 = i.InputSimd128Register(1);
|
| - DwVfpRegister table_base = src0.low();
|
| - int table_size = GetVtblTableSize(src0, src1);
|
| - // Convert the shuffle lane masks to byte masks in kScratchQuadReg.
|
| - int scratch_s_base = kScratchQuadReg.code() * 4;
|
| - for (int j = 0; j < 2; j++) {
|
| - int32_t four_lanes = i.InputInt32(2 + j);
|
| - for (int k = 0; k < 2; k++) {
|
| - uint8_t w0 = (four_lanes & 0xF) * kShortSize;
|
| - four_lanes >>= 8;
|
| - uint8_t w1 = (four_lanes & 0xF) * kShortSize;
|
| - four_lanes >>= 8;
|
| - int32_t mask = w0 | ((w0 + 1) << 8) | (w1 << 16) | ((w1 + 1) << 24);
|
| - // Ensure byte indices are in [0, 31] so masks are never NaNs.
|
| - four_lanes &= 0x1F1F1F1F;
|
| - __ vmov(SwVfpRegister::from_code(scratch_s_base + 2 * j + k),
|
| - bit_cast<float>(mask));
|
| - }
|
| - }
|
| - NeonListOperand table(table_base, table_size);
|
| - if (!dst.is(src0) && !dst.is(src1)) {
|
| - __ vtbl(dst.low(), table, kScratchQuadReg.low());
|
| - __ vtbl(dst.high(), table, kScratchQuadReg.high());
|
| - } else {
|
| - __ vtbl(kScratchQuadReg.low(), table, kScratchQuadReg.low());
|
| - __ vtbl(kScratchQuadReg.high(), table, kScratchQuadReg.high());
|
| - __ vmov(dst, kScratchQuadReg);
|
| - }
|
| - break;
|
| - }
|
| case kArmS8x16ZipLeft: {
|
| Simd128Register dst = i.OutputSimd128Register(),
|
| src1 = i.InputSimd128Register(1);
|
| @@ -2388,7 +2347,10 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction(
|
| src0 = i.InputSimd128Register(0),
|
| src1 = i.InputSimd128Register(1);
|
| DwVfpRegister table_base = src0.low();
|
| - int table_size = GetVtblTableSize(src0, src1);
|
| + // If unary shuffle, table is src0 (2 d-registers), otherwise src0 and
|
| + // src1. They must be consecutive.
|
| + int table_size = src0.is(src1) ? 2 : 4;
|
| + DCHECK_IMPLIES(!src0.is(src1), src0.code() + 1 == src1.code());
|
| // The shuffle lane mask is a byte mask, materialize in kScratchQuadReg.
|
| int scratch_s_base = kScratchQuadReg.code() * 4;
|
| for (int j = 0; j < 4; j++) {
|
|
|