xref: /aosp_15_r20/art/test/684-checker-simd-dotprod/src/other/TestCharShort.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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