1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2018 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker package other; 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker /** 20*795d594fSAndroid Build Coastguard Worker * Tests for dot product idiom vectorization: char and short case. 21*795d594fSAndroid Build Coastguard Worker */ 22*795d594fSAndroid Build Coastguard Worker public class TestCharShort { 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker public static final int ARRAY_SIZE = 1024; 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimple(short[], short[]) loop_optimization (before) 27*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 28*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 29*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 30*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 31*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 32*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 33*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<Get1>>,<<Get2>>] loop:<<Loop>> outer_loop:none 34*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 35*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 36*795d594fSAndroid Build Coastguard Worker 37*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdSimple(short[], short[]) loop_optimization (after) 38*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 39*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 40*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 41*795d594fSAndroid Build Coastguard Worker // 42*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 43*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 44*795d594fSAndroid Build Coastguard Worker // 45*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 46*795d594fSAndroid Build Coastguard Worker // 47*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 48*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 49*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 50*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 51*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 52*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 53*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<Load1>>,<<Load2>>] type:Int16 loop:<<Loop>> outer_loop:none 54*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 55*795d594fSAndroid Build Coastguard Worker // 56*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 57*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 58*795d594fSAndroid Build Coastguard Worker // 59*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdSimple(short[] a, short[] b)60*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimple(short[] a, short[] b) { 61*795d594fSAndroid Build Coastguard Worker int s = 1; 62*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 63*795d594fSAndroid Build Coastguard Worker int temp = a[i] * b[i]; 64*795d594fSAndroid Build Coastguard Worker s += temp; 65*795d594fSAndroid Build Coastguard Worker } 66*795d594fSAndroid Build Coastguard Worker return s - 1; 67*795d594fSAndroid Build Coastguard Worker } 68*795d594fSAndroid Build Coastguard Worker 69*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdComplex(short[], short[]) loop_optimization (before) 70*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 71*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 72*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 73*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 74*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 75*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddC1:i\d+>> Add [<<Get1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 76*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC1:s\d+>> TypeConversion [<<AddC1>>] loop:<<Loop>> outer_loop:none 77*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 78*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddC2:i\d+>> Add [<<Get2>>,<<Const1>>] loop:<<Loop>> outer_loop:none 79*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC2:s\d+>> TypeConversion [<<AddC2>>] loop:<<Loop>> outer_loop:none 80*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<TypeC1>>,<<TypeC2>>] loop:<<Loop>> outer_loop:none 81*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 82*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 83*795d594fSAndroid Build Coastguard Worker 84*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdComplex(short[], short[]) loop_optimization (after) 85*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 86*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 87*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 88*795d594fSAndroid Build Coastguard Worker // 89*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 90*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 91*795d594fSAndroid Build Coastguard Worker // 92*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 93*795d594fSAndroid Build Coastguard Worker // 94*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 95*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Const1>>] loop:none 96*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 97*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 98*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 99*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 100*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd1:d\d+>> VecAdd [<<Load1>>,<<Repl>>] loop:<<Loop>> outer_loop:none 101*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 102*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd2:d\d+>> VecAdd [<<Load2>>,<<Repl>>] loop:<<Loop>> outer_loop:none 103*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<VAdd1>>,<<VAdd2>>] type:Int16 loop:<<Loop>> outer_loop:none 104*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 105*795d594fSAndroid Build Coastguard Worker // 106*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 107*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 108*795d594fSAndroid Build Coastguard Worker // 109*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdComplex(short[] a, short[] b)110*795d594fSAndroid Build Coastguard Worker public static final int testDotProdComplex(short[] a, short[] b) { 111*795d594fSAndroid Build Coastguard Worker int s = 1; 112*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 113*795d594fSAndroid Build Coastguard Worker int temp = ((short)(a[i] + 1)) * ((short)(b[i] + 1)); 114*795d594fSAndroid Build Coastguard Worker s += temp; 115*795d594fSAndroid Build Coastguard Worker } 116*795d594fSAndroid Build Coastguard Worker return s - 1; 117*795d594fSAndroid Build Coastguard Worker } 118*795d594fSAndroid Build Coastguard Worker 119*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsigned(char[], char[]) loop_optimization (before) 120*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 121*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 122*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 123*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 124*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 125*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 126*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<Get1>>,<<Get2>>] loop:<<Loop>> outer_loop:none 127*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 128*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 129*795d594fSAndroid Build Coastguard Worker 130*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdSimpleUnsigned(char[], char[]) loop_optimization (after) 131*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 132*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 133*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 134*795d594fSAndroid Build Coastguard Worker // 135*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 136*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 137*795d594fSAndroid Build Coastguard Worker // 138*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 139*795d594fSAndroid Build Coastguard Worker // 140*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 141*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 142*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 143*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 144*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 145*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 146*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<Load1>>,<<Load2>>] type:Uint16 loop:<<Loop>> outer_loop:none 147*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 148*795d594fSAndroid Build Coastguard Worker // 149*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 150*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 151*795d594fSAndroid Build Coastguard Worker // 152*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdSimpleUnsigned(char[] a, char[] b)153*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsigned(char[] a, char[] b) { 154*795d594fSAndroid Build Coastguard Worker int s = 1; 155*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 156*795d594fSAndroid Build Coastguard Worker int temp = a[i] * b[i]; 157*795d594fSAndroid Build Coastguard Worker s += temp; 158*795d594fSAndroid Build Coastguard Worker } 159*795d594fSAndroid Build Coastguard Worker return s - 1; 160*795d594fSAndroid Build Coastguard Worker } 161*795d594fSAndroid Build Coastguard Worker 162*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdComplexUnsigned(char[], char[]) loop_optimization (before) 163*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 164*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 165*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 166*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 167*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 168*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddC:i\d+>> Add [<<Get1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 169*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC1:c\d+>> TypeConversion [<<AddC>>] loop:<<Loop>> outer_loop:none 170*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 171*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddGets:i\d+>> Add [<<Get2>>,<<Const1>>] loop:<<Loop>> outer_loop:none 172*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC2:c\d+>> TypeConversion [<<AddGets>>] loop:<<Loop>> outer_loop:none 173*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<TypeC1>>,<<TypeC2>>] loop:<<Loop>> outer_loop:none 174*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 175*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 176*795d594fSAndroid Build Coastguard Worker 177*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdComplexUnsigned(char[], char[]) loop_optimization (after) 178*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 179*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 180*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 181*795d594fSAndroid Build Coastguard Worker // 182*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 183*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 184*795d594fSAndroid Build Coastguard Worker // 185*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 186*795d594fSAndroid Build Coastguard Worker // 187*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 188*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Const1>>] loop:none 189*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 190*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 191*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 192*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 193*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd1:d\d+>> VecAdd [<<Load1>>,<<Repl>>] loop:<<Loop>> outer_loop:none 194*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 195*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd2:d\d+>> VecAdd [<<Load2>>,<<Repl>>] loop:<<Loop>> outer_loop:none 196*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<VAdd1>>,<<VAdd2>>] type:Uint16 loop:<<Loop>> outer_loop:none 197*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 198*795d594fSAndroid Build Coastguard Worker // 199*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 200*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 201*795d594fSAndroid Build Coastguard Worker // 202*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdComplexUnsigned(char[] a, char[] b)203*795d594fSAndroid Build Coastguard Worker public static final int testDotProdComplexUnsigned(char[] a, char[] b) { 204*795d594fSAndroid Build Coastguard Worker int s = 1; 205*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 206*795d594fSAndroid Build Coastguard Worker int temp = ((char)(a[i] + 1)) * ((char)(b[i] + 1)); 207*795d594fSAndroid Build Coastguard Worker s += temp; 208*795d594fSAndroid Build Coastguard Worker } 209*795d594fSAndroid Build Coastguard Worker return s - 1; 210*795d594fSAndroid Build Coastguard Worker } 211*795d594fSAndroid Build Coastguard Worker 212*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdComplexUnsignedCastToSigned(char[], char[]) loop_optimization (before) 213*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 214*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 215*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 216*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 217*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 218*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddC:i\d+>> Add [<<Get1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 219*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC1:s\d+>> TypeConversion [<<AddC>>] loop:<<Loop>> outer_loop:none 220*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:c\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 221*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddGets:i\d+>> Add [<<Get2>>,<<Const1>>] loop:<<Loop>> outer_loop:none 222*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC2:s\d+>> TypeConversion [<<AddGets>>] loop:<<Loop>> outer_loop:none 223*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<TypeC1>>,<<TypeC2>>] loop:<<Loop>> outer_loop:none 224*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 225*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 226*795d594fSAndroid Build Coastguard Worker 227*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdComplexUnsignedCastToSigned(char[], char[]) loop_optimization (after) 228*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 229*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 230*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 231*795d594fSAndroid Build Coastguard Worker // 232*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 233*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 234*795d594fSAndroid Build Coastguard Worker // 235*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 236*795d594fSAndroid Build Coastguard Worker // 237*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 238*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Const1>>] loop:none 239*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 240*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 241*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 242*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 243*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd1:d\d+>> VecAdd [<<Load1>>,<<Repl>>] loop:<<Loop>> outer_loop:none 244*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 245*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd2:d\d+>> VecAdd [<<Load2>>,<<Repl>>] loop:<<Loop>> outer_loop:none 246*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<VAdd1>>,<<VAdd2>>] type:Int16 loop:<<Loop>> outer_loop:none 247*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 248*795d594fSAndroid Build Coastguard Worker // 249*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 250*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 251*795d594fSAndroid Build Coastguard Worker // 252*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdComplexUnsignedCastToSigned(char[] a, char[] b)253*795d594fSAndroid Build Coastguard Worker public static final int testDotProdComplexUnsignedCastToSigned(char[] a, char[] b) { 254*795d594fSAndroid Build Coastguard Worker int s = 1; 255*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 256*795d594fSAndroid Build Coastguard Worker int temp = ((short)(a[i] + 1)) * ((short)(b[i] + 1)); 257*795d594fSAndroid Build Coastguard Worker s += temp; 258*795d594fSAndroid Build Coastguard Worker } 259*795d594fSAndroid Build Coastguard Worker return s - 1; 260*795d594fSAndroid Build Coastguard Worker } 261*795d594fSAndroid Build Coastguard Worker 262*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdComplexSignedCastToUnsigned(short[], short[]) loop_optimization (before) 263*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 264*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 265*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 266*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:i\d+>> Phi [<<Const1>>,{{i\d+}}] loop:<<Loop>> outer_loop:none 267*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get1:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 268*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddC:i\d+>> Add [<<Get1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 269*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC1:c\d+>> TypeConversion [<<AddC>>] loop:<<Loop>> outer_loop:none 270*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Get2:s\d+>> ArrayGet [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 271*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<AddGets:i\d+>> Add [<<Get2>>,<<Const1>>] loop:<<Loop>> outer_loop:none 272*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<TypeC2:c\d+>> TypeConversion [<<AddGets>>] loop:<<Loop>> outer_loop:none 273*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Mul:i\d+>> Mul [<<TypeC1>>,<<TypeC2>>] loop:<<Loop>> outer_loop:none 274*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi2>>,<<Mul>>] loop:<<Loop>> outer_loop:none 275*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const1>>] loop:<<Loop>> outer_loop:none 276*795d594fSAndroid Build Coastguard Worker 277*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdComplexSignedCastToUnsigned(short[], short[]) loop_optimization (after) 278*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const0:i\d+>> IntConstant 0 loop:none 279*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const1:i\d+>> IntConstant 1 loop:none 280*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 281*795d594fSAndroid Build Coastguard Worker // 282*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 283*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 284*795d594fSAndroid Build Coastguard Worker // 285*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 286*795d594fSAndroid Build Coastguard Worker // 287*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Const8:i\d+>> IntConstant 8 loop:none 288*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Repl:d\d+>> VecReplicateScalar [<<Const1>>] loop:none 289*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Set:d\d+>> VecSetScalars [<<Const1>>] loop:none 290*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi1:i\d+>> Phi [<<Const0>>,{{i\d+}}] loop:<<Loop:B\d+>> outer_loop:none 291*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Phi2:d\d+>> Phi [<<Set>>,{{d\d+}}] loop:<<Loop>> outer_loop:none 292*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load1:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 293*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd1:d\d+>> VecAdd [<<Load1>>,<<Repl>>] loop:<<Loop>> outer_loop:none 294*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Load2:d\d+>> VecLoad [{{l\d+}},<<Phi1>>] loop:<<Loop>> outer_loop:none 295*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<VAdd2:d\d+>> VecAdd [<<Load2>>,<<Repl>>] loop:<<Loop>> outer_loop:none 296*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd [<<Phi2>>,<<VAdd1>>,<<VAdd2>>] type:Uint16 loop:<<Loop>> outer_loop:none 297*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: Add [<<Phi1>>,<<Const8>>] loop:<<Loop>> outer_loop:none 298*795d594fSAndroid Build Coastguard Worker // 299*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: <<Reduce:d\d+>> VecReduce [<<Phi2>>] loop:none 300*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecExtractScalar [<<Reduce>>] loop:none 301*795d594fSAndroid Build Coastguard Worker // 302*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdComplexSignedCastToUnsigned(short[] a, short[] b)303*795d594fSAndroid Build Coastguard Worker public static final int testDotProdComplexSignedCastToUnsigned(short[] a, short[] b) { 304*795d594fSAndroid Build Coastguard Worker int s = 1; 305*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 306*795d594fSAndroid Build Coastguard Worker int temp = ((char)(a[i] + 1)) * ((char)(b[i] + 1)); 307*795d594fSAndroid Build Coastguard Worker s += temp; 308*795d594fSAndroid Build Coastguard Worker } 309*795d594fSAndroid Build Coastguard Worker return s - 1; 310*795d594fSAndroid Build Coastguard Worker } 311*795d594fSAndroid Build Coastguard Worker 312*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdSignedToInt(short[], short[]) loop_optimization (after) 313*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 314*795d594fSAndroid Build Coastguard Worker // 315*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 316*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 317*795d594fSAndroid Build Coastguard Worker // 318*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 319*795d594fSAndroid Build Coastguard Worker // 320*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd type:Int16 321*795d594fSAndroid Build Coastguard Worker // 322*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdSignedToInt(short[] a, short[] b)323*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSignedToInt(short[] a, short[] b) { 324*795d594fSAndroid Build Coastguard Worker int s = 1; 325*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 326*795d594fSAndroid Build Coastguard Worker int temp = ((int)(a[i])) * ((int)(b[i])); 327*795d594fSAndroid Build Coastguard Worker s += temp; 328*795d594fSAndroid Build Coastguard Worker } 329*795d594fSAndroid Build Coastguard Worker return s - 1; 330*795d594fSAndroid Build Coastguard Worker } 331*795d594fSAndroid Build Coastguard Worker 332*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdParamSigned(int, short[]) loop_optimization (after) 333*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 334*795d594fSAndroid Build Coastguard Worker // 335*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 336*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 337*795d594fSAndroid Build Coastguard Worker // 338*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 339*795d594fSAndroid Build Coastguard Worker // 340*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd type:Int16 341*795d594fSAndroid Build Coastguard Worker // 342*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdParamSigned(int x, short[] b)343*795d594fSAndroid Build Coastguard Worker public static final int testDotProdParamSigned(int x, short[] b) { 344*795d594fSAndroid Build Coastguard Worker int s = 1; 345*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 346*795d594fSAndroid Build Coastguard Worker int temp = (short)(x) * b[i]; 347*795d594fSAndroid Build Coastguard Worker s += temp; 348*795d594fSAndroid Build Coastguard Worker } 349*795d594fSAndroid Build Coastguard Worker return s - 1; 350*795d594fSAndroid Build Coastguard Worker } 351*795d594fSAndroid Build Coastguard Worker 352*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdParamUnsigned(int, char[]) loop_optimization (after) 353*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 354*795d594fSAndroid Build Coastguard Worker // 355*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 356*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 357*795d594fSAndroid Build Coastguard Worker // 358*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 359*795d594fSAndroid Build Coastguard Worker // 360*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd type:Uint16 361*795d594fSAndroid Build Coastguard Worker // 362*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdParamUnsigned(int x, char[] b)363*795d594fSAndroid Build Coastguard Worker public static final int testDotProdParamUnsigned(int x, char[] b) { 364*795d594fSAndroid Build Coastguard Worker int s = 1; 365*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 366*795d594fSAndroid Build Coastguard Worker int temp = (char)(x) * b[i]; 367*795d594fSAndroid Build Coastguard Worker s += temp; 368*795d594fSAndroid Build Coastguard Worker } 369*795d594fSAndroid Build Coastguard Worker return s - 1; 370*795d594fSAndroid Build Coastguard Worker } 371*795d594fSAndroid Build Coastguard Worker 372*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdIntParam(int, short[]) loop_optimization (after) 373*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdIntParam(int x, short[] b)374*795d594fSAndroid Build Coastguard Worker public static final int testDotProdIntParam(int x, short[] b) { 375*795d594fSAndroid Build Coastguard Worker int s = 1; 376*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 377*795d594fSAndroid Build Coastguard Worker int temp = b[i] * (x); 378*795d594fSAndroid Build Coastguard Worker s += temp; 379*795d594fSAndroid Build Coastguard Worker } 380*795d594fSAndroid Build Coastguard Worker return s - 1; 381*795d594fSAndroid Build Coastguard Worker } 382*795d594fSAndroid Build Coastguard Worker 383*795d594fSAndroid Build Coastguard Worker /// CHECK-START-{ARM64}: int other.TestCharShort.testDotProdSignedToChar(short[], short[]) loop_optimization (after) 384*795d594fSAndroid Build Coastguard Worker /// CHECK-IF: hasIsaFeature("sve") and os.environ.get('ART_FORCE_TRY_PREDICATED_SIMD') == 'true' 385*795d594fSAndroid Build Coastguard Worker // 386*795d594fSAndroid Build Coastguard Worker // 16-bit DotProd is not supported for SVE. 387*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd 388*795d594fSAndroid Build Coastguard Worker // 389*795d594fSAndroid Build Coastguard Worker /// CHECK-ELSE: 390*795d594fSAndroid Build Coastguard Worker // 391*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: VecDotProd type:Uint16 392*795d594fSAndroid Build Coastguard Worker // 393*795d594fSAndroid Build Coastguard Worker /// CHECK-FI: testDotProdSignedToChar(short[] a, short[] b)394*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSignedToChar(short[] a, short[] b) { 395*795d594fSAndroid Build Coastguard Worker int s = 1; 396*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 397*795d594fSAndroid Build Coastguard Worker int temp = ((char)(a[i])) * ((char)(b[i])); 398*795d594fSAndroid Build Coastguard Worker s += temp; 399*795d594fSAndroid Build Coastguard Worker } 400*795d594fSAndroid Build Coastguard Worker return s - 1; 401*795d594fSAndroid Build Coastguard Worker } 402*795d594fSAndroid Build Coastguard Worker 403*795d594fSAndroid Build Coastguard Worker // Cases when result of Mul is type-converted are not supported. 404*795d594fSAndroid Build Coastguard Worker 405*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleMulCastToSigned(short[], short[]) loop_optimization (after) 406*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd type:Uint16 testDotProdSimpleMulCastToSigned(short[] a, short[] b)407*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleMulCastToSigned(short[] a, short[] b) { 408*795d594fSAndroid Build Coastguard Worker int s = 1; 409*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 410*795d594fSAndroid Build Coastguard Worker short temp = (short)(a[i] * b[i]); 411*795d594fSAndroid Build Coastguard Worker s += temp; 412*795d594fSAndroid Build Coastguard Worker } 413*795d594fSAndroid Build Coastguard Worker return s - 1; 414*795d594fSAndroid Build Coastguard Worker } 415*795d594fSAndroid Build Coastguard Worker 416*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleMulCastToUnsigned(short[], short[]) loop_optimization (after) 417*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleMulCastToUnsigned(short[] a, short[] b)418*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleMulCastToUnsigned(short[] a, short[] b) { 419*795d594fSAndroid Build Coastguard Worker int s = 1; 420*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 421*795d594fSAndroid Build Coastguard Worker char temp = (char)(a[i] * b[i]); 422*795d594fSAndroid Build Coastguard Worker s += temp; 423*795d594fSAndroid Build Coastguard Worker } 424*795d594fSAndroid Build Coastguard Worker return s - 1; 425*795d594fSAndroid Build Coastguard Worker } 426*795d594fSAndroid Build Coastguard Worker 427*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsignedMulCastToSigned(char[], char[]) loop_optimization (after) 428*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleUnsignedMulCastToSigned(char[] a, char[] b)429*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsignedMulCastToSigned(char[] a, char[] b) { 430*795d594fSAndroid Build Coastguard Worker int s = 1; 431*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 432*795d594fSAndroid Build Coastguard Worker short temp = (short)(a[i] * b[i]); 433*795d594fSAndroid Build Coastguard Worker s += temp; 434*795d594fSAndroid Build Coastguard Worker } 435*795d594fSAndroid Build Coastguard Worker return s - 1; 436*795d594fSAndroid Build Coastguard Worker } 437*795d594fSAndroid Build Coastguard Worker 438*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsignedMulCastToUnsigned(char[], char[]) loop_optimization (after) 439*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleUnsignedMulCastToUnsigned(char[] a, char[] b)440*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsignedMulCastToUnsigned(char[] a, char[] b) { 441*795d594fSAndroid Build Coastguard Worker int s = 1; 442*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 443*795d594fSAndroid Build Coastguard Worker char temp = (char)(a[i] * b[i]); 444*795d594fSAndroid Build Coastguard Worker s += temp; 445*795d594fSAndroid Build Coastguard Worker } 446*795d594fSAndroid Build Coastguard Worker return s - 1; 447*795d594fSAndroid Build Coastguard Worker } 448*795d594fSAndroid Build Coastguard Worker 449*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleCastToShort(short[], short[]) loop_optimization (after) 450*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleCastToShort(short[] a, short[] b)451*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleCastToShort(short[] a, short[] b) { 452*795d594fSAndroid Build Coastguard Worker int s = 1; 453*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 454*795d594fSAndroid Build Coastguard Worker short temp = (short)(a[i] * b[i]); 455*795d594fSAndroid Build Coastguard Worker s += temp; 456*795d594fSAndroid Build Coastguard Worker } 457*795d594fSAndroid Build Coastguard Worker return s - 1; 458*795d594fSAndroid Build Coastguard Worker } 459*795d594fSAndroid Build Coastguard Worker 460*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleCastToChar(short[], short[]) loop_optimization (after) 461*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleCastToChar(short[] a, short[] b)462*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleCastToChar(short[] a, short[] b) { 463*795d594fSAndroid Build Coastguard Worker int s = 1; 464*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 465*795d594fSAndroid Build Coastguard Worker char temp = (char)(a[i] * b[i]); 466*795d594fSAndroid Build Coastguard Worker s += temp; 467*795d594fSAndroid Build Coastguard Worker } 468*795d594fSAndroid Build Coastguard Worker return s - 1; 469*795d594fSAndroid Build Coastguard Worker } 470*795d594fSAndroid Build Coastguard Worker 471*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsignedCastToShort(char[], char[]) loop_optimization (after) 472*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleUnsignedCastToShort(char[] a, char[] b)473*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsignedCastToShort(char[] a, char[] b) { 474*795d594fSAndroid Build Coastguard Worker int s = 1; 475*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 476*795d594fSAndroid Build Coastguard Worker short temp = (short)(a[i] * b[i]); 477*795d594fSAndroid Build Coastguard Worker s += temp; 478*795d594fSAndroid Build Coastguard Worker } 479*795d594fSAndroid Build Coastguard Worker return s - 1; 480*795d594fSAndroid Build Coastguard Worker } 481*795d594fSAndroid Build Coastguard Worker 482*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsignedCastToChar(char[], char[]) loop_optimization (after) 483*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleUnsignedCastToChar(char[] a, char[] b)484*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsignedCastToChar(char[] a, char[] b) { 485*795d594fSAndroid Build Coastguard Worker int s = 1; 486*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 487*795d594fSAndroid Build Coastguard Worker char temp = (char)(a[i] * b[i]); 488*795d594fSAndroid Build Coastguard Worker s += temp; 489*795d594fSAndroid Build Coastguard Worker } 490*795d594fSAndroid Build Coastguard Worker return s - 1; 491*795d594fSAndroid Build Coastguard Worker } 492*795d594fSAndroid Build Coastguard Worker 493*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSimpleUnsignedCastToLong(char[], char[]) loop_optimization (after) 494*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSimpleUnsignedCastToLong(char[] a, char[] b)495*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSimpleUnsignedCastToLong(char[] a, char[] b) { 496*795d594fSAndroid Build Coastguard Worker int s = 1; 497*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 498*795d594fSAndroid Build Coastguard Worker long temp = (long)(a[i] * b[i]); 499*795d594fSAndroid Build Coastguard Worker s += temp; 500*795d594fSAndroid Build Coastguard Worker } 501*795d594fSAndroid Build Coastguard Worker return s - 1; 502*795d594fSAndroid Build Coastguard Worker } 503*795d594fSAndroid Build Coastguard Worker 504*795d594fSAndroid Build Coastguard Worker // Narrowing conversions. 505*795d594fSAndroid Build Coastguard Worker 506*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSignedNarrowerSigned(short[], short[]) loop_optimization (after) 507*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSignedNarrowerSigned(short[] a, short[] b)508*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSignedNarrowerSigned(short[] a, short[] b) { 509*795d594fSAndroid Build Coastguard Worker int s = 1; 510*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 511*795d594fSAndroid Build Coastguard Worker int temp = ((byte)(a[i])) * ((byte)(b[i])); 512*795d594fSAndroid Build Coastguard Worker s += temp; 513*795d594fSAndroid Build Coastguard Worker } 514*795d594fSAndroid Build Coastguard Worker return s - 1; 515*795d594fSAndroid Build Coastguard Worker } 516*795d594fSAndroid Build Coastguard Worker 517*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdSignedNarrowerUnsigned(short[], short[]) loop_optimization (after) 518*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdSignedNarrowerUnsigned(short[] a, short[] b)519*795d594fSAndroid Build Coastguard Worker public static final int testDotProdSignedNarrowerUnsigned(short[] a, short[] b) { 520*795d594fSAndroid Build Coastguard Worker int s = 1; 521*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 522*795d594fSAndroid Build Coastguard Worker int temp = (a[i] & 0xff) * (b[i] & 0xff); 523*795d594fSAndroid Build Coastguard Worker s += temp; 524*795d594fSAndroid Build Coastguard Worker } 525*795d594fSAndroid Build Coastguard Worker return s - 1; 526*795d594fSAndroid Build Coastguard Worker } 527*795d594fSAndroid Build Coastguard Worker 528*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdUnsignedNarrowerSigned(char[], char[]) loop_optimization (after) 529*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdUnsignedNarrowerSigned(char[] a, char[] b)530*795d594fSAndroid Build Coastguard Worker public static final int testDotProdUnsignedNarrowerSigned(char[] a, char[] b) { 531*795d594fSAndroid Build Coastguard Worker int s = 1; 532*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 533*795d594fSAndroid Build Coastguard Worker int temp = ((byte)(a[i])) * ((byte)(b[i])); 534*795d594fSAndroid Build Coastguard Worker s += temp; 535*795d594fSAndroid Build Coastguard Worker } 536*795d594fSAndroid Build Coastguard Worker return s - 1; 537*795d594fSAndroid Build Coastguard Worker } 538*795d594fSAndroid Build Coastguard Worker 539*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdUnsignedNarrowerUnsigned(char[], char[]) loop_optimization (after) 540*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdUnsignedNarrowerUnsigned(char[] a, char[] b)541*795d594fSAndroid Build Coastguard Worker public static final int testDotProdUnsignedNarrowerUnsigned(char[] a, char[] b) { 542*795d594fSAndroid Build Coastguard Worker int s = 1; 543*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 544*795d594fSAndroid Build Coastguard Worker int temp = (a[i] & 0xff) * (b[i] & 0xff); 545*795d594fSAndroid Build Coastguard Worker s += temp; 546*795d594fSAndroid Build Coastguard Worker } 547*795d594fSAndroid Build Coastguard Worker return s - 1; 548*795d594fSAndroid Build Coastguard Worker } 549*795d594fSAndroid Build Coastguard Worker 550*795d594fSAndroid Build Coastguard Worker /// CHECK-START: int other.TestCharShort.testDotProdUnsignedSigned(char[], short[]) loop_optimization (after) 551*795d594fSAndroid Build Coastguard Worker /// CHECK-NOT: VecDotProd testDotProdUnsignedSigned(char[] a, short[] b)552*795d594fSAndroid Build Coastguard Worker public static final int testDotProdUnsignedSigned(char[] a, short[] b) { 553*795d594fSAndroid Build Coastguard Worker int s = 1; 554*795d594fSAndroid Build Coastguard Worker for (int i = 0; i < b.length; i++) { 555*795d594fSAndroid Build Coastguard Worker int temp = a[i] * b[i]; 556*795d594fSAndroid Build Coastguard Worker s += temp; 557*795d594fSAndroid Build Coastguard Worker } 558*795d594fSAndroid Build Coastguard Worker return s - 1; 559*795d594fSAndroid Build Coastguard Worker } 560*795d594fSAndroid Build Coastguard Worker expectEquals(int expected, int result)561*795d594fSAndroid Build Coastguard Worker private static void expectEquals(int expected, int result) { 562*795d594fSAndroid Build Coastguard Worker if (expected != result) { 563*795d594fSAndroid Build Coastguard Worker throw new Error("Expected: " + expected + ", found: " + result); 564*795d594fSAndroid Build Coastguard Worker } 565*795d594fSAndroid Build Coastguard Worker } 566*795d594fSAndroid Build Coastguard Worker testDotProd(short[] s1, short[] s2, char[] c1, char[] c2, int[] results)567*795d594fSAndroid Build Coastguard Worker private static void testDotProd(short[] s1, short[] s2, char[] c1, char[] c2, int[] results) { 568*795d594fSAndroid Build Coastguard Worker expectEquals(results[0], testDotProdSimple(s1, s2)); 569*795d594fSAndroid Build Coastguard Worker expectEquals(results[1], testDotProdComplex(s1, s2)); 570*795d594fSAndroid Build Coastguard Worker expectEquals(results[2], testDotProdSimpleUnsigned(c1, c2)); 571*795d594fSAndroid Build Coastguard Worker expectEquals(results[3], testDotProdComplexUnsigned(c1, c2)); 572*795d594fSAndroid Build Coastguard Worker expectEquals(results[4], testDotProdComplexUnsignedCastToSigned(c1, c2)); 573*795d594fSAndroid Build Coastguard Worker expectEquals(results[5], testDotProdComplexSignedCastToUnsigned(s1, s2)); 574*795d594fSAndroid Build Coastguard Worker expectEquals(results[6], testDotProdSignedToInt(s1, s2)); 575*795d594fSAndroid Build Coastguard Worker expectEquals(results[7], testDotProdParamSigned(-32768, s2)); 576*795d594fSAndroid Build Coastguard Worker expectEquals(results[8], testDotProdParamUnsigned(-32768, c2)); 577*795d594fSAndroid Build Coastguard Worker expectEquals(results[9], testDotProdIntParam(-32768, s2)); 578*795d594fSAndroid Build Coastguard Worker expectEquals(results[10], testDotProdSignedToChar(s1, s2)); 579*795d594fSAndroid Build Coastguard Worker expectEquals(results[11], testDotProdSimpleMulCastToSigned(s1, s2)); 580*795d594fSAndroid Build Coastguard Worker expectEquals(results[12], testDotProdSimpleMulCastToUnsigned(s1, s2)); 581*795d594fSAndroid Build Coastguard Worker expectEquals(results[13], testDotProdSimpleUnsignedMulCastToSigned(c1, c2)); 582*795d594fSAndroid Build Coastguard Worker expectEquals(results[14], testDotProdSimpleUnsignedMulCastToUnsigned(c1, c2)); 583*795d594fSAndroid Build Coastguard Worker expectEquals(results[15], testDotProdSimpleCastToShort(s1, s2)); 584*795d594fSAndroid Build Coastguard Worker expectEquals(results[16], testDotProdSimpleCastToChar(s1, s2)); 585*795d594fSAndroid Build Coastguard Worker expectEquals(results[17], testDotProdSimpleUnsignedCastToShort(c1, c2)); 586*795d594fSAndroid Build Coastguard Worker expectEquals(results[18], testDotProdSimpleUnsignedCastToChar(c1, c2)); 587*795d594fSAndroid Build Coastguard Worker expectEquals(results[19], testDotProdSimpleUnsignedCastToLong(c1, c2)); 588*795d594fSAndroid Build Coastguard Worker expectEquals(results[20], testDotProdSignedNarrowerSigned(s1, s2)); 589*795d594fSAndroid Build Coastguard Worker expectEquals(results[21], testDotProdSignedNarrowerUnsigned(s1, s2)); 590*795d594fSAndroid Build Coastguard Worker expectEquals(results[22], testDotProdUnsignedNarrowerSigned(c1, c2)); 591*795d594fSAndroid Build Coastguard Worker expectEquals(results[23], testDotProdUnsignedNarrowerUnsigned(c1, c2)); 592*795d594fSAndroid Build Coastguard Worker expectEquals(results[24], testDotProdUnsignedSigned(c1, s2)); 593*795d594fSAndroid Build Coastguard Worker } 594*795d594fSAndroid Build Coastguard Worker run()595*795d594fSAndroid Build Coastguard Worker public static void run() { 596*795d594fSAndroid Build Coastguard Worker final short MAX_S = Short.MAX_VALUE; 597*795d594fSAndroid Build Coastguard Worker final short MIN_S = Short.MAX_VALUE; 598*795d594fSAndroid Build Coastguard Worker 599*795d594fSAndroid Build Coastguard Worker short[] s1_1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 600*795d594fSAndroid Build Coastguard Worker short[] s2_1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 601*795d594fSAndroid Build Coastguard Worker char[] c1_1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 602*795d594fSAndroid Build Coastguard Worker char[] c2_1 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 603*795d594fSAndroid Build Coastguard Worker int[] results_1 = { 2147352578, -2147483634, 2147352578, -2147483634, -2147483634, -2147483634, 604*795d594fSAndroid Build Coastguard Worker 2147352578, -2147418112, 2147418112, -2147418112, 2147352578, 605*795d594fSAndroid Build Coastguard Worker 2, 2, 2, 2, 2, 2, 2, 2, 2147352578, 2, 130050, 2, 130050, 2147352578 }; 606*795d594fSAndroid Build Coastguard Worker testDotProd(s1_1, s2_1, c1_1, c2_1, results_1); 607*795d594fSAndroid Build Coastguard Worker 608*795d594fSAndroid Build Coastguard Worker short[] s1_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S, MAX_S, MAX_S }; 609*795d594fSAndroid Build Coastguard Worker short[] s2_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S, MAX_S, MAX_S }; 610*795d594fSAndroid Build Coastguard Worker char[] c1_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S, MAX_S, MAX_S }; 611*795d594fSAndroid Build Coastguard Worker char[] c2_2 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S, MAX_S, MAX_S }; 612*795d594fSAndroid Build Coastguard Worker int[] results_2 = { -262140, 12, -262140, 12, 12, 12, -262140, 131072, -131072, 131072, 613*795d594fSAndroid Build Coastguard Worker -262140, 4, 4, 4, 4, 4, 4, 4, 4, -262140, 4, 260100, 4, 260100, -262140 }; 614*795d594fSAndroid Build Coastguard Worker testDotProd(s1_2, s2_2, c1_2, c2_2, results_2); 615*795d594fSAndroid Build Coastguard Worker 616*795d594fSAndroid Build Coastguard Worker short[] s1_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 617*795d594fSAndroid Build Coastguard Worker short[] s2_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 618*795d594fSAndroid Build Coastguard Worker char[] c1_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 619*795d594fSAndroid Build Coastguard Worker char[] c2_3 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MAX_S, MAX_S }; 620*795d594fSAndroid Build Coastguard Worker int[] results_3 = { 2147352578, -2147483634, 2147352578, -2147483634, -2147483634, 621*795d594fSAndroid Build Coastguard Worker -2147483634, 2147352578, -2147418112, 2147418112, -2147418112, 622*795d594fSAndroid Build Coastguard Worker 2147352578, 2, 2, 2, 2, 2, 2, 2, 2, 2147352578, 2, 130050, 2, 623*795d594fSAndroid Build Coastguard Worker 130050, 2147352578}; 624*795d594fSAndroid Build Coastguard Worker testDotProd(s1_3, s2_3, c1_3, c2_3, results_3); 625*795d594fSAndroid Build Coastguard Worker 626*795d594fSAndroid Build Coastguard Worker 627*795d594fSAndroid Build Coastguard Worker short[] s1_4 = { MIN_S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 628*795d594fSAndroid Build Coastguard Worker short[] s2_4 = { MIN_S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 629*795d594fSAndroid Build Coastguard Worker char[] c1_4 = { MIN_S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 630*795d594fSAndroid Build Coastguard Worker char[] c2_4 = { MIN_S, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, MIN_S, MIN_S }; 631*795d594fSAndroid Build Coastguard Worker int[] results_4 = { -1073938429, -1073741811, -1073938429, -1073741811, -1073741811, 632*795d594fSAndroid Build Coastguard Worker -1073741811, -1073938429, 1073840128, -1073840128, 1073840128, 633*795d594fSAndroid Build Coastguard Worker -1073938429, 3, 3, 3, 3, 3, 3, 3, 3, -1073938429, 3, 195075, 3, 634*795d594fSAndroid Build Coastguard Worker 195075, -1073938429 }; 635*795d594fSAndroid Build Coastguard Worker testDotProd(s1_4, s2_4, c1_4, c2_4, results_4); 636*795d594fSAndroid Build Coastguard Worker } 637*795d594fSAndroid Build Coastguard Worker main(String[] args)638*795d594fSAndroid Build Coastguard Worker public static void main(String[] args) { 639*795d594fSAndroid Build Coastguard Worker run(); 640*795d594fSAndroid Build Coastguard Worker } 641*795d594fSAndroid Build Coastguard Worker } 642