xref: /aosp_15_r20/external/libaom/test/simd_cmp_impl.inc (revision 77c1e3ccc04c968bd2bc212e87364f250e820521)
1*77c1e3ccSAndroid Build Coastguard Worker/*
2*77c1e3ccSAndroid Build Coastguard Worker * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3*77c1e3ccSAndroid Build Coastguard Worker *
4*77c1e3ccSAndroid Build Coastguard Worker * This source code is subject to the terms of the BSD 2 Clause License and
5*77c1e3ccSAndroid Build Coastguard Worker * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6*77c1e3ccSAndroid Build Coastguard Worker * was not distributed with this source code in the LICENSE file, you can
7*77c1e3ccSAndroid Build Coastguard Worker * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8*77c1e3ccSAndroid Build Coastguard Worker * Media Patent License 1.0 was not distributed with this source code in the
9*77c1e3ccSAndroid Build Coastguard Worker * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10*77c1e3ccSAndroid Build Coastguard Worker */
11*77c1e3ccSAndroid Build Coastguard Worker
12*77c1e3ccSAndroid Build Coastguard Worker#include <assert.h>
13*77c1e3ccSAndroid Build Coastguard Worker#include <string>
14*77c1e3ccSAndroid Build Coastguard Worker
15*77c1e3ccSAndroid Build Coastguard Worker#include "config/aom_dsp_rtcd.h"
16*77c1e3ccSAndroid Build Coastguard Worker
17*77c1e3ccSAndroid Build Coastguard Worker#include "test/acm_random.h"
18*77c1e3ccSAndroid Build Coastguard Worker// Inlining not forced for the compiler due to some tests calling
19*77c1e3ccSAndroid Build Coastguard Worker// SIMD_INLINE functions via function pointers
20*77c1e3ccSAndroid Build Coastguard Worker#undef SIMD_INLINE
21*77c1e3ccSAndroid Build Coastguard Worker#define SIMD_INLINE static inline
22*77c1e3ccSAndroid Build Coastguard Worker#include "aom_dsp/aom_simd.h"
23*77c1e3ccSAndroid Build Coastguard Worker#include "aom_dsp/simd/v256_intrinsics_c.h"
24*77c1e3ccSAndroid Build Coastguard Worker
25*77c1e3ccSAndroid Build Coastguard Worker// Machine tuned code goes into this file. This file is included from
26*77c1e3ccSAndroid Build Coastguard Worker// simd_cmp_sse2.cc, simd_cmp_ssse3.cc etc which define the macros
27*77c1e3ccSAndroid Build Coastguard Worker// ARCH (=neon, sse2, ssse3, etc), SIMD_NAMESPACE and ARCH_POSTFIX().
28*77c1e3ccSAndroid Build Coastguard Worker
29*77c1e3ccSAndroid Build Coastguard Worker#ifdef _MSC_VER
30*77c1e3ccSAndroid Build Coastguard Worker// Disable "value of intrinsic immediate argument 'value' is out of range
31*77c1e3ccSAndroid Build Coastguard Worker// 'lowerbound - upperbound'" warning. Visual Studio emits this warning though
32*77c1e3ccSAndroid Build Coastguard Worker// the parameters are conditionally checked in e.g., v256_shr_n_byte. Adding a
33*77c1e3ccSAndroid Build Coastguard Worker// mask doesn't always appear to be sufficient.
34*77c1e3ccSAndroid Build Coastguard Worker#pragma warning(disable : 4556)
35*77c1e3ccSAndroid Build Coastguard Worker#endif
36*77c1e3ccSAndroid Build Coastguard Worker
37*77c1e3ccSAndroid Build Coastguard Workerusing libaom_test::ACMRandom;
38*77c1e3ccSAndroid Build Coastguard Worker
39*77c1e3ccSAndroid Build Coastguard Workernamespace SIMD_NAMESPACE {
40*77c1e3ccSAndroid Build Coastguard Worker
41*77c1e3ccSAndroid Build Coastguard Worker// Wrap templates around intrinsics using immediate values
42*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
43*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shl_n_byte(v64 a) {
44*77c1e3ccSAndroid Build Coastguard Worker  return v64_shl_n_byte(a, shift);
45*77c1e3ccSAndroid Build Coastguard Worker}
46*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
47*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_byte(v64 a) {
48*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_byte(a, shift);
49*77c1e3ccSAndroid Build Coastguard Worker}
50*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
51*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shl_n_8(v64 a) {
52*77c1e3ccSAndroid Build Coastguard Worker  return v64_shl_n_8(a, shift);
53*77c1e3ccSAndroid Build Coastguard Worker}
54*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
55*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_u8(v64 a) {
56*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_u8(a, shift);
57*77c1e3ccSAndroid Build Coastguard Worker}
58*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
59*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_s8(v64 a) {
60*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_s8(a, shift);
61*77c1e3ccSAndroid Build Coastguard Worker}
62*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
63*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shl_n_16(v64 a) {
64*77c1e3ccSAndroid Build Coastguard Worker  return v64_shl_n_16(a, shift);
65*77c1e3ccSAndroid Build Coastguard Worker}
66*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
67*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_u16(v64 a) {
68*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_u16(a, shift);
69*77c1e3ccSAndroid Build Coastguard Worker}
70*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
71*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_s16(v64 a) {
72*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_s16(a, shift);
73*77c1e3ccSAndroid Build Coastguard Worker}
74*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
75*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shl_n_32(v64 a) {
76*77c1e3ccSAndroid Build Coastguard Worker  return v64_shl_n_32(a, shift);
77*77c1e3ccSAndroid Build Coastguard Worker}
78*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
79*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_u32(v64 a) {
80*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_u32(a, shift);
81*77c1e3ccSAndroid Build Coastguard Worker}
82*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
83*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_shr_n_s32(v64 a) {
84*77c1e3ccSAndroid Build Coastguard Worker  return v64_shr_n_s32(a, shift);
85*77c1e3ccSAndroid Build Coastguard Worker}
86*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
87*77c1e3ccSAndroid Build Coastguard Workerv64 imm_v64_align(v64 a, v64 b) {
88*77c1e3ccSAndroid Build Coastguard Worker  return v64_align(a, b, shift);
89*77c1e3ccSAndroid Build Coastguard Worker}
90*77c1e3ccSAndroid Build Coastguard Worker
91*77c1e3ccSAndroid Build Coastguard Worker// Wrap templates around corresponding C implementations of the above
92*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
93*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shl_n_byte(c_v64 a) {
94*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shl_n_byte(a, shift);
95*77c1e3ccSAndroid Build Coastguard Worker}
96*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
97*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_byte(c_v64 a) {
98*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_byte(a, shift);
99*77c1e3ccSAndroid Build Coastguard Worker}
100*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
101*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shl_n_8(c_v64 a) {
102*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shl_n_8(a, shift);
103*77c1e3ccSAndroid Build Coastguard Worker}
104*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
105*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_u8(c_v64 a) {
106*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_u8(a, shift);
107*77c1e3ccSAndroid Build Coastguard Worker}
108*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
109*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_s8(c_v64 a) {
110*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_s8(a, shift);
111*77c1e3ccSAndroid Build Coastguard Worker}
112*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
113*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shl_n_16(c_v64 a) {
114*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shl_n_16(a, shift);
115*77c1e3ccSAndroid Build Coastguard Worker}
116*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
117*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_u16(c_v64 a) {
118*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_u16(a, shift);
119*77c1e3ccSAndroid Build Coastguard Worker}
120*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
121*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_s16(c_v64 a) {
122*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_s16(a, shift);
123*77c1e3ccSAndroid Build Coastguard Worker}
124*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
125*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shl_n_32(c_v64 a) {
126*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shl_n_32(a, shift);
127*77c1e3ccSAndroid Build Coastguard Worker}
128*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
129*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_u32(c_v64 a) {
130*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_u32(a, shift);
131*77c1e3ccSAndroid Build Coastguard Worker}
132*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
133*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_shr_n_s32(c_v64 a) {
134*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_shr_n_s32(a, shift);
135*77c1e3ccSAndroid Build Coastguard Worker}
136*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
137*77c1e3ccSAndroid Build Coastguard Workerc_v64 c_imm_v64_align(c_v64 a, c_v64 b) {
138*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_align(a, b, shift);
139*77c1e3ccSAndroid Build Coastguard Worker}
140*77c1e3ccSAndroid Build Coastguard Worker
141*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
142*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shl_n_byte(v128 a) {
143*77c1e3ccSAndroid Build Coastguard Worker  return v128_shl_n_byte(a, shift);
144*77c1e3ccSAndroid Build Coastguard Worker}
145*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
146*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_byte(v128 a) {
147*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_byte(a, shift);
148*77c1e3ccSAndroid Build Coastguard Worker}
149*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
150*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shl_n_8(v128 a) {
151*77c1e3ccSAndroid Build Coastguard Worker  return v128_shl_n_8(a, shift);
152*77c1e3ccSAndroid Build Coastguard Worker}
153*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
154*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_u8(v128 a) {
155*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_u8(a, shift);
156*77c1e3ccSAndroid Build Coastguard Worker}
157*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
158*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_s8(v128 a) {
159*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_s8(a, shift);
160*77c1e3ccSAndroid Build Coastguard Worker}
161*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
162*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shl_n_16(v128 a) {
163*77c1e3ccSAndroid Build Coastguard Worker  return v128_shl_n_16(a, shift);
164*77c1e3ccSAndroid Build Coastguard Worker}
165*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
166*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_u16(v128 a) {
167*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_u16(a, shift);
168*77c1e3ccSAndroid Build Coastguard Worker}
169*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
170*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_s16(v128 a) {
171*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_s16(a, shift);
172*77c1e3ccSAndroid Build Coastguard Worker}
173*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
174*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shl_n_32(v128 a) {
175*77c1e3ccSAndroid Build Coastguard Worker  return v128_shl_n_32(a, shift);
176*77c1e3ccSAndroid Build Coastguard Worker}
177*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
178*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_u32(v128 a) {
179*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_u32(a, shift);
180*77c1e3ccSAndroid Build Coastguard Worker}
181*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
182*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_s32(v128 a) {
183*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_s32(a, shift);
184*77c1e3ccSAndroid Build Coastguard Worker}
185*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
186*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shl_n_64(v128 a) {
187*77c1e3ccSAndroid Build Coastguard Worker  return v128_shl_n_64(a, shift);
188*77c1e3ccSAndroid Build Coastguard Worker}
189*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
190*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_u64(v128 a) {
191*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_u64(a, shift);
192*77c1e3ccSAndroid Build Coastguard Worker}
193*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
194*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_shr_n_s64(v128 a) {
195*77c1e3ccSAndroid Build Coastguard Worker  return v128_shr_n_s64(a, shift);
196*77c1e3ccSAndroid Build Coastguard Worker}
197*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
198*77c1e3ccSAndroid Build Coastguard Workerv128 imm_v128_align(v128 a, v128 b) {
199*77c1e3ccSAndroid Build Coastguard Worker  return v128_align(a, b, shift);
200*77c1e3ccSAndroid Build Coastguard Worker}
201*77c1e3ccSAndroid Build Coastguard Worker
202*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
203*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shl_n_byte(c_v128 a) {
204*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shl_n_byte(a, shift);
205*77c1e3ccSAndroid Build Coastguard Worker}
206*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
207*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_byte(c_v128 a) {
208*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_byte(a, shift);
209*77c1e3ccSAndroid Build Coastguard Worker}
210*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
211*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shl_n_8(c_v128 a) {
212*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shl_n_8(a, shift);
213*77c1e3ccSAndroid Build Coastguard Worker}
214*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
215*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_u8(c_v128 a) {
216*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_u8(a, shift);
217*77c1e3ccSAndroid Build Coastguard Worker}
218*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
219*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_s8(c_v128 a) {
220*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_s8(a, shift);
221*77c1e3ccSAndroid Build Coastguard Worker}
222*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
223*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shl_n_16(c_v128 a) {
224*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shl_n_16(a, shift);
225*77c1e3ccSAndroid Build Coastguard Worker}
226*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
227*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_u16(c_v128 a) {
228*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_u16(a, shift);
229*77c1e3ccSAndroid Build Coastguard Worker}
230*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
231*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_s16(c_v128 a) {
232*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_s16(a, shift);
233*77c1e3ccSAndroid Build Coastguard Worker}
234*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
235*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shl_n_32(c_v128 a) {
236*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shl_n_32(a, shift);
237*77c1e3ccSAndroid Build Coastguard Worker}
238*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
239*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_u32(c_v128 a) {
240*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_u32(a, shift);
241*77c1e3ccSAndroid Build Coastguard Worker}
242*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
243*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_s32(c_v128 a) {
244*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_s32(a, shift);
245*77c1e3ccSAndroid Build Coastguard Worker}
246*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
247*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shl_n_64(c_v128 a) {
248*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shl_n_64(a, shift);
249*77c1e3ccSAndroid Build Coastguard Worker}
250*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
251*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_u64(c_v128 a) {
252*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_u64(a, shift);
253*77c1e3ccSAndroid Build Coastguard Worker}
254*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
255*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_shr_n_s64(c_v128 a) {
256*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_shr_n_s64(a, shift);
257*77c1e3ccSAndroid Build Coastguard Worker}
258*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
259*77c1e3ccSAndroid Build Coastguard Workerc_v128 c_imm_v128_align(c_v128 a, c_v128 b) {
260*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_align(a, b, shift);
261*77c1e3ccSAndroid Build Coastguard Worker}
262*77c1e3ccSAndroid Build Coastguard Worker
263*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
264*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_word(v256 a) {
265*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_word(a, shift);
266*77c1e3ccSAndroid Build Coastguard Worker}
267*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
268*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_word(v256 a) {
269*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_word(a, shift);
270*77c1e3ccSAndroid Build Coastguard Worker}
271*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
272*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_byte(v256 a) {
273*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_byte(a, shift);
274*77c1e3ccSAndroid Build Coastguard Worker}
275*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
276*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_byte(v256 a) {
277*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_byte(a, shift);
278*77c1e3ccSAndroid Build Coastguard Worker}
279*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
280*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_8(v256 a) {
281*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_8(a, shift);
282*77c1e3ccSAndroid Build Coastguard Worker}
283*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
284*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_u8(v256 a) {
285*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_u8(a, shift);
286*77c1e3ccSAndroid Build Coastguard Worker}
287*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
288*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_s8(v256 a) {
289*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_s8(a, shift);
290*77c1e3ccSAndroid Build Coastguard Worker}
291*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
292*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_16(v256 a) {
293*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_16(a, shift);
294*77c1e3ccSAndroid Build Coastguard Worker}
295*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
296*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_u16(v256 a) {
297*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_u16(a, shift);
298*77c1e3ccSAndroid Build Coastguard Worker}
299*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
300*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_s16(v256 a) {
301*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_s16(a, shift);
302*77c1e3ccSAndroid Build Coastguard Worker}
303*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
304*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_32(v256 a) {
305*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_32(a, shift);
306*77c1e3ccSAndroid Build Coastguard Worker}
307*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
308*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_u32(v256 a) {
309*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_u32(a, shift);
310*77c1e3ccSAndroid Build Coastguard Worker}
311*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
312*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_s32(v256 a) {
313*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_s32(a, shift);
314*77c1e3ccSAndroid Build Coastguard Worker}
315*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
316*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shl_n_64(v256 a) {
317*77c1e3ccSAndroid Build Coastguard Worker  return v256_shl_n_64(a, shift);
318*77c1e3ccSAndroid Build Coastguard Worker}
319*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
320*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_u64(v256 a) {
321*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_u64(a, shift);
322*77c1e3ccSAndroid Build Coastguard Worker}
323*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
324*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_shr_n_s64(v256 a) {
325*77c1e3ccSAndroid Build Coastguard Worker  return v256_shr_n_s64(a, shift);
326*77c1e3ccSAndroid Build Coastguard Worker}
327*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
328*77c1e3ccSAndroid Build Coastguard Workerv256 imm_v256_align(v256 a, v256 b) {
329*77c1e3ccSAndroid Build Coastguard Worker  return v256_align(a, b, shift);
330*77c1e3ccSAndroid Build Coastguard Worker}
331*77c1e3ccSAndroid Build Coastguard Worker
332*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
333*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_word(c_v256 a) {
334*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_word(a, shift);
335*77c1e3ccSAndroid Build Coastguard Worker}
336*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
337*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_word(c_v256 a) {
338*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_word(a, shift);
339*77c1e3ccSAndroid Build Coastguard Worker}
340*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
341*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_byte(c_v256 a) {
342*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_byte(a, shift);
343*77c1e3ccSAndroid Build Coastguard Worker}
344*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
345*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_byte(c_v256 a) {
346*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_byte(a, shift);
347*77c1e3ccSAndroid Build Coastguard Worker}
348*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
349*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_8(c_v256 a) {
350*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_8(a, shift);
351*77c1e3ccSAndroid Build Coastguard Worker}
352*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
353*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_u8(c_v256 a) {
354*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_u8(a, shift);
355*77c1e3ccSAndroid Build Coastguard Worker}
356*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
357*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_s8(c_v256 a) {
358*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_s8(a, shift);
359*77c1e3ccSAndroid Build Coastguard Worker}
360*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
361*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_16(c_v256 a) {
362*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_16(a, shift);
363*77c1e3ccSAndroid Build Coastguard Worker}
364*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
365*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_u16(c_v256 a) {
366*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_u16(a, shift);
367*77c1e3ccSAndroid Build Coastguard Worker}
368*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
369*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_s16(c_v256 a) {
370*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_s16(a, shift);
371*77c1e3ccSAndroid Build Coastguard Worker}
372*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
373*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_32(c_v256 a) {
374*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_32(a, shift);
375*77c1e3ccSAndroid Build Coastguard Worker}
376*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
377*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_u32(c_v256 a) {
378*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_u32(a, shift);
379*77c1e3ccSAndroid Build Coastguard Worker}
380*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
381*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_s32(c_v256 a) {
382*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_s32(a, shift);
383*77c1e3ccSAndroid Build Coastguard Worker}
384*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
385*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shl_n_64(c_v256 a) {
386*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shl_n_64(a, shift);
387*77c1e3ccSAndroid Build Coastguard Worker}
388*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
389*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_u64(c_v256 a) {
390*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_u64(a, shift);
391*77c1e3ccSAndroid Build Coastguard Worker}
392*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
393*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_shr_n_s64(c_v256 a) {
394*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_shr_n_s64(a, shift);
395*77c1e3ccSAndroid Build Coastguard Worker}
396*77c1e3ccSAndroid Build Coastguard Workertemplate <int shift>
397*77c1e3ccSAndroid Build Coastguard Workerc_v256 c_imm_v256_align(c_v256 a, c_v256 b) {
398*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_align(a, b, shift);
399*77c1e3ccSAndroid Build Coastguard Worker}
400*77c1e3ccSAndroid Build Coastguard Worker
401*77c1e3ccSAndroid Build Coastguard Workernamespace {
402*77c1e3ccSAndroid Build Coastguard Worker
403*77c1e3ccSAndroid Build Coastguard Worker// Wrappers around the the SAD and SSD functions
404*77c1e3ccSAndroid Build Coastguard Workeruint32_t v64_sad_u8(v64 a, v64 b) {
405*77c1e3ccSAndroid Build Coastguard Worker  return v64_sad_u8_sum(::v64_sad_u8(v64_sad_u8_init(), a, b));
406*77c1e3ccSAndroid Build Coastguard Worker}
407*77c1e3ccSAndroid Build Coastguard Workeruint32_t v64_ssd_u8(v64 a, v64 b) {
408*77c1e3ccSAndroid Build Coastguard Worker  return v64_ssd_u8_sum(::v64_ssd_u8(v64_ssd_u8_init(), a, b));
409*77c1e3ccSAndroid Build Coastguard Worker}
410*77c1e3ccSAndroid Build Coastguard Worker
411*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v64_sad_u8(c_v64 a, c_v64 b) {
412*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_sad_u8_sum(::c_v64_sad_u8(c_v64_sad_u8_init(), a, b));
413*77c1e3ccSAndroid Build Coastguard Worker}
414*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v64_ssd_u8(c_v64 a, c_v64 b) {
415*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_ssd_u8_sum(::c_v64_ssd_u8(c_v64_ssd_u8_init(), a, b));
416*77c1e3ccSAndroid Build Coastguard Worker}
417*77c1e3ccSAndroid Build Coastguard Workeruint32_t v128_sad_u8(v128 a, v128 b) {
418*77c1e3ccSAndroid Build Coastguard Worker  return v128_sad_u8_sum(::v128_sad_u8(v128_sad_u8_init(), a, b));
419*77c1e3ccSAndroid Build Coastguard Worker}
420*77c1e3ccSAndroid Build Coastguard Workeruint32_t v128_ssd_u8(v128 a, v128 b) {
421*77c1e3ccSAndroid Build Coastguard Worker  return v128_ssd_u8_sum(::v128_ssd_u8(v128_ssd_u8_init(), a, b));
422*77c1e3ccSAndroid Build Coastguard Worker}
423*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v128_sad_u8(c_v128 a, c_v128 b) {
424*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_sad_u8_sum(::c_v128_sad_u8(c_v128_sad_u8_init(), a, b));
425*77c1e3ccSAndroid Build Coastguard Worker}
426*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v128_ssd_u8(c_v128 a, c_v128 b) {
427*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_ssd_u8_sum(::c_v128_ssd_u8(c_v128_ssd_u8_init(), a, b));
428*77c1e3ccSAndroid Build Coastguard Worker}
429*77c1e3ccSAndroid Build Coastguard Workeruint32_t v128_sad_u16(v128 a, v128 b) {
430*77c1e3ccSAndroid Build Coastguard Worker  return v128_sad_u16_sum(::v128_sad_u16(v128_sad_u16_init(), a, b));
431*77c1e3ccSAndroid Build Coastguard Worker}
432*77c1e3ccSAndroid Build Coastguard Workeruint64_t v128_ssd_s16(v128 a, v128 b) {
433*77c1e3ccSAndroid Build Coastguard Worker  return v128_ssd_s16_sum(::v128_ssd_s16(v128_ssd_s16_init(), a, b));
434*77c1e3ccSAndroid Build Coastguard Worker}
435*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v128_sad_u16(c_v128 a, c_v128 b) {
436*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_sad_u16_sum(::c_v128_sad_u16(c_v128_sad_u16_init(), a, b));
437*77c1e3ccSAndroid Build Coastguard Worker}
438*77c1e3ccSAndroid Build Coastguard Workeruint64_t c_v128_ssd_s16(c_v128 a, c_v128 b) {
439*77c1e3ccSAndroid Build Coastguard Worker  return c_v128_ssd_s16_sum(::c_v128_ssd_s16(c_v128_ssd_s16_init(), a, b));
440*77c1e3ccSAndroid Build Coastguard Worker}
441*77c1e3ccSAndroid Build Coastguard Workeruint32_t v256_sad_u8(v256 a, v256 b) {
442*77c1e3ccSAndroid Build Coastguard Worker  return v256_sad_u8_sum(::v256_sad_u8(v256_sad_u8_init(), a, b));
443*77c1e3ccSAndroid Build Coastguard Worker}
444*77c1e3ccSAndroid Build Coastguard Workeruint32_t v256_ssd_u8(v256 a, v256 b) {
445*77c1e3ccSAndroid Build Coastguard Worker  return v256_ssd_u8_sum(::v256_ssd_u8(v256_ssd_u8_init(), a, b));
446*77c1e3ccSAndroid Build Coastguard Worker}
447*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v256_sad_u8(c_v256 a, c_v256 b) {
448*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_sad_u8_sum(::c_v256_sad_u8(c_v256_sad_u8_init(), a, b));
449*77c1e3ccSAndroid Build Coastguard Worker}
450*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v256_ssd_u8(c_v256 a, c_v256 b) {
451*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_ssd_u8_sum(::c_v256_ssd_u8(c_v256_ssd_u8_init(), a, b));
452*77c1e3ccSAndroid Build Coastguard Worker}
453*77c1e3ccSAndroid Build Coastguard Workeruint32_t v256_sad_u16(v256 a, v256 b) {
454*77c1e3ccSAndroid Build Coastguard Worker  return v256_sad_u16_sum(::v256_sad_u16(v256_sad_u16_init(), a, b));
455*77c1e3ccSAndroid Build Coastguard Worker}
456*77c1e3ccSAndroid Build Coastguard Workeruint64_t v256_ssd_s16(v256 a, v256 b) {
457*77c1e3ccSAndroid Build Coastguard Worker  return v256_ssd_s16_sum(::v256_ssd_s16(v256_ssd_s16_init(), a, b));
458*77c1e3ccSAndroid Build Coastguard Worker}
459*77c1e3ccSAndroid Build Coastguard Workeruint32_t c_v256_sad_u16(c_v256 a, c_v256 b) {
460*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_sad_u16_sum(::c_v256_sad_u16(c_v256_sad_u16_init(), a, b));
461*77c1e3ccSAndroid Build Coastguard Worker}
462*77c1e3ccSAndroid Build Coastguard Workeruint64_t c_v256_ssd_s16(c_v256 a, c_v256 b) {
463*77c1e3ccSAndroid Build Coastguard Worker  return c_v256_ssd_s16_sum(::c_v256_ssd_s16(c_v256_ssd_s16_init(), a, b));
464*77c1e3ccSAndroid Build Coastguard Worker}
465*77c1e3ccSAndroid Build Coastguard Worker
466*77c1e3ccSAndroid Build Coastguard Workertypedef void (*fptr)();
467*77c1e3ccSAndroid Build Coastguard Worker
468*77c1e3ccSAndroid Build Coastguard Workertypedef struct {
469*77c1e3ccSAndroid Build Coastguard Worker  const char *name;
470*77c1e3ccSAndroid Build Coastguard Worker  fptr ref;
471*77c1e3ccSAndroid Build Coastguard Worker  fptr simd;
472*77c1e3ccSAndroid Build Coastguard Worker} mapping;
473*77c1e3ccSAndroid Build Coastguard Worker
474*77c1e3ccSAndroid Build Coastguard Worker#define MAP(name) \
475*77c1e3ccSAndroid Build Coastguard Worker  { #name, reinterpret_cast < fptr>(c_##name), reinterpret_cast < fptr>(name) }
476*77c1e3ccSAndroid Build Coastguard Worker
477*77c1e3ccSAndroid Build Coastguard Workerconst mapping m[] = { MAP(v64_sad_u8),
478*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ssd_u8),
479*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_add_8),
480*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_add_16),
481*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sadd_s8),
482*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sadd_u8),
483*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sadd_s16),
484*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_add_32),
485*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sub_8),
486*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ssub_u8),
487*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ssub_s8),
488*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sub_16),
489*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ssub_s16),
490*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ssub_u16),
491*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_sub_32),
492*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziplo_8),
493*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziphi_8),
494*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziplo_16),
495*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziphi_16),
496*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziplo_32),
497*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_ziphi_32),
498*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_pack_s32_u16),
499*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_pack_s32_s16),
500*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_pack_s16_u8),
501*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_pack_s16_s8),
502*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unziphi_8),
503*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unziplo_8),
504*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unziphi_16),
505*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unziplo_16),
506*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_or),
507*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_xor),
508*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_and),
509*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_andn),
510*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_mullo_s16),
511*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_mulhi_s16),
512*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_mullo_s32),
513*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_madd_s16),
514*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_madd_us8),
515*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_avg_u8),
516*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_rdavg_u8),
517*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_rdavg_u16),
518*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_avg_u16),
519*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_min_u8),
520*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_max_u8),
521*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_min_s8),
522*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_max_s8),
523*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_min_s16),
524*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_max_s16),
525*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmpgt_s8),
526*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmplt_s8),
527*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmpeq_8),
528*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmpgt_s16),
529*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmplt_s16),
530*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_cmpeq_16),
531*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shuffle_8),
532*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<1>),
533*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<2>),
534*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<3>),
535*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<4>),
536*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<5>),
537*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<6>),
538*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_align<7>),
539*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_abs_s8),
540*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_abs_s16),
541*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpacklo_u8_s16),
542*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpackhi_u8_s16),
543*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpacklo_s8_s16),
544*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpackhi_s8_s16),
545*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpacklo_u16_s32),
546*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpacklo_s16_s32),
547*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpackhi_u16_s32),
548*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_unpackhi_s16_s32),
549*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<1>),
550*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<2>),
551*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<3>),
552*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<4>),
553*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<5>),
554*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<6>),
555*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_byte<7>),
556*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<1>),
557*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<2>),
558*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<3>),
559*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<4>),
560*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<5>),
561*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<6>),
562*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_byte<7>),
563*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<1>),
564*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<2>),
565*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<3>),
566*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<4>),
567*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<5>),
568*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<6>),
569*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_8<7>),
570*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<1>),
571*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<2>),
572*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<3>),
573*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<4>),
574*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<5>),
575*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<6>),
576*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u8<7>),
577*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<1>),
578*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<2>),
579*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<3>),
580*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<4>),
581*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<5>),
582*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<6>),
583*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s8<7>),
584*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<1>),
585*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<2>),
586*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<4>),
587*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<6>),
588*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<8>),
589*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<10>),
590*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<12>),
591*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_16<14>),
592*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<1>),
593*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<2>),
594*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<4>),
595*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<6>),
596*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<8>),
597*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<10>),
598*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<12>),
599*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u16<14>),
600*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<1>),
601*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<2>),
602*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<4>),
603*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<6>),
604*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<8>),
605*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<10>),
606*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<12>),
607*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s16<14>),
608*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<1>),
609*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<4>),
610*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<8>),
611*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<12>),
612*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<16>),
613*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<20>),
614*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<24>),
615*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shl_n_32<28>),
616*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<1>),
617*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<4>),
618*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<8>),
619*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<12>),
620*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<16>),
621*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<20>),
622*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<24>),
623*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_u32<28>),
624*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<1>),
625*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<4>),
626*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<8>),
627*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<12>),
628*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<16>),
629*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<20>),
630*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<24>),
631*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v64_shr_n_s32<28>),
632*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shl_8),
633*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_u8),
634*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_s8),
635*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shl_16),
636*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_u16),
637*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_s16),
638*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shl_32),
639*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_u32),
640*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_shr_s32),
641*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_hadd_u8),
642*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_hadd_s16),
643*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_dotp_s16),
644*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_dotp_su8),
645*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_u64),
646*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_low_u32),
647*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_high_u32),
648*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_low_s32),
649*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_high_s32),
650*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_dup_8),
651*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_dup_16),
652*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_dup_32),
653*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_from_32),
654*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_zero),
655*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_from_16),
656*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sad_u8),
657*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssd_u8),
658*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sad_u16),
659*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssd_s16),
660*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_add_8),
661*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_add_16),
662*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sadd_s8),
663*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sadd_u8),
664*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sadd_s16),
665*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_add_32),
666*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_add_64),
667*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sub_8),
668*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssub_u8),
669*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssub_s8),
670*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sub_16),
671*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssub_s16),
672*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ssub_u16),
673*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sub_32),
674*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_sub_64),
675*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziplo_8),
676*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziphi_8),
677*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziplo_16),
678*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziphi_16),
679*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziplo_32),
680*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziphi_32),
681*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziplo_64),
682*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_ziphi_64),
683*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziphi_8),
684*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziplo_8),
685*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziphi_16),
686*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziplo_16),
687*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziphi_32),
688*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unziplo_32),
689*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_pack_s32_u16),
690*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_pack_s32_s16),
691*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_pack_s16_u8),
692*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_pack_s16_s8),
693*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_or),
694*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_xor),
695*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_and),
696*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_andn),
697*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_mullo_s16),
698*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_mulhi_s16),
699*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_mullo_s32),
700*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_madd_s16),
701*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_madd_us8),
702*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_avg_u8),
703*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_rdavg_u8),
704*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_rdavg_u16),
705*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_avg_u16),
706*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_min_u8),
707*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_max_u8),
708*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_min_s8),
709*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_max_s8),
710*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_min_s16),
711*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_max_s16),
712*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_min_s32),
713*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_max_s32),
714*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpgt_s8),
715*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmplt_s8),
716*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpeq_8),
717*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpgt_s16),
718*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpeq_16),
719*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmplt_s16),
720*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpgt_s32),
721*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmpeq_32),
722*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_cmplt_s32),
723*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shuffle_8),
724*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<1>),
725*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<2>),
726*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<3>),
727*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<4>),
728*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<5>),
729*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<6>),
730*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<7>),
731*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<8>),
732*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<9>),
733*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<10>),
734*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<11>),
735*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<12>),
736*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<13>),
737*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<14>),
738*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_align<15>),
739*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_abs_s8),
740*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_abs_s16),
741*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_padd_u8),
742*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_padd_s16),
743*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpacklo_u16_s32),
744*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpacklo_s16_s32),
745*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpackhi_u16_s32),
746*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpackhi_s16_s32),
747*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<1>),
748*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<2>),
749*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<3>),
750*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<4>),
751*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<5>),
752*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<6>),
753*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<7>),
754*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<8>),
755*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<9>),
756*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<10>),
757*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<11>),
758*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<12>),
759*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<13>),
760*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<14>),
761*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_byte<15>),
762*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<1>),
763*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<2>),
764*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<3>),
765*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<4>),
766*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<5>),
767*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<6>),
768*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<7>),
769*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<8>),
770*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<9>),
771*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<10>),
772*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<11>),
773*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<12>),
774*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<13>),
775*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<14>),
776*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_byte<15>),
777*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<1>),
778*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<2>),
779*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<3>),
780*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<4>),
781*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<5>),
782*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<6>),
783*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_8<7>),
784*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<1>),
785*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<2>),
786*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<3>),
787*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<4>),
788*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<5>),
789*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<6>),
790*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u8<7>),
791*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<1>),
792*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<2>),
793*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<3>),
794*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<4>),
795*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<5>),
796*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<6>),
797*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s8<7>),
798*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<1>),
799*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<2>),
800*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<4>),
801*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<6>),
802*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<8>),
803*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<10>),
804*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<12>),
805*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_16<14>),
806*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<1>),
807*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<2>),
808*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<4>),
809*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<6>),
810*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<8>),
811*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<10>),
812*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<12>),
813*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u16<14>),
814*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<1>),
815*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<2>),
816*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<4>),
817*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<6>),
818*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<8>),
819*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<10>),
820*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<12>),
821*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s16<14>),
822*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<1>),
823*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<4>),
824*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<8>),
825*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<12>),
826*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<16>),
827*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<20>),
828*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<24>),
829*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_32<28>),
830*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<1>),
831*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<4>),
832*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<8>),
833*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<12>),
834*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<16>),
835*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<20>),
836*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<24>),
837*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u32<28>),
838*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<1>),
839*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<4>),
840*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<8>),
841*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<12>),
842*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<16>),
843*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<20>),
844*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<24>),
845*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s32<28>),
846*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<1>),
847*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<4>),
848*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<8>),
849*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<12>),
850*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<16>),
851*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<20>),
852*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<24>),
853*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<28>),
854*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<32>),
855*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<36>),
856*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<40>),
857*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<44>),
858*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<48>),
859*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<52>),
860*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<56>),
861*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shl_n_64<60>),
862*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<1>),
863*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<4>),
864*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<8>),
865*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<12>),
866*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<16>),
867*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<20>),
868*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<24>),
869*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<28>),
870*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<32>),
871*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<36>),
872*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<40>),
873*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<44>),
874*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<48>),
875*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<52>),
876*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<56>),
877*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_u64<60>),
878*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<1>),
879*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<4>),
880*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<8>),
881*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<12>),
882*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<16>),
883*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<20>),
884*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<24>),
885*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<28>),
886*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<32>),
887*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<36>),
888*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<40>),
889*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<44>),
890*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<48>),
891*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<52>),
892*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<56>),
893*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v128_shr_n_s64<60>),
894*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_from_v64),
895*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_zip_8),
896*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_zip_16),
897*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_zip_32),
898*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_mul_s16),
899*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpack_u8_s16),
900*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpack_s8_s16),
901*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpack_u16_s32),
902*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpack_s16_s32),
903*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shl_8),
904*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_u8),
905*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_s8),
906*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shl_16),
907*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_u16),
908*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_s16),
909*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shl_32),
910*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_u32),
911*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_s32),
912*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shl_64),
913*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_u64),
914*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_shr_s64),
915*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_hadd_u8),
916*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dotp_su8),
917*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dotp_s16),
918*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dotp_s32),
919*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_low_u32),
920*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_low_v64),
921*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_high_v64),
922*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_from_64),
923*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_from_32),
924*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_movemask_8),
925*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_zero),
926*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dup_8),
927*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dup_16),
928*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dup_32),
929*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_dup_64),
930*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpacklo_u8_s16),
931*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpackhi_u8_s16),
932*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpacklo_s8_s16),
933*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_unpackhi_s8_s16),
934*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_blend_8),
935*77c1e3ccSAndroid Build Coastguard Worker                      MAP(u32_load_unaligned),
936*77c1e3ccSAndroid Build Coastguard Worker                      MAP(u32_store_unaligned),
937*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_load_unaligned),
938*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v64_store_unaligned),
939*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_load_unaligned),
940*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v128_store_unaligned),
941*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sad_u8),
942*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssd_u8),
943*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sad_u16),
944*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssd_s16),
945*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_hadd_u8),
946*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_low_u64),
947*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dotp_su8),
948*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dotp_s16),
949*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dotp_s32),
950*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_add_8),
951*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_add_16),
952*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sadd_s8),
953*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sadd_u8),
954*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sadd_s16),
955*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_add_32),
956*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_add_64),
957*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sub_8),
958*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssub_u8),
959*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssub_s8),
960*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sub_16),
961*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssub_u16),
962*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ssub_s16),
963*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sub_32),
964*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_sub_64),
965*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziplo_8),
966*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziphi_8),
967*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziplo_16),
968*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziphi_16),
969*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziplo_32),
970*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziphi_32),
971*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziplo_64),
972*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziphi_64),
973*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziphi_8),
974*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziplo_8),
975*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziphi_16),
976*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziplo_16),
977*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziphi_32),
978*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziplo_32),
979*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziphi_64),
980*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unziplo_64),
981*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_pack_s32_u16),
982*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_pack_s32_s16),
983*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_pack_s16_u8),
984*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_pack_s16_s8),
985*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_or),
986*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_xor),
987*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_and),
988*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_andn),
989*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_mullo_s16),
990*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_mulhi_s16),
991*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_mullo_s32),
992*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_madd_s16),
993*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_madd_us8),
994*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_avg_u8),
995*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_rdavg_u8),
996*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_rdavg_u16),
997*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_avg_u16),
998*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_min_u8),
999*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_max_u8),
1000*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_min_s8),
1001*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_max_s8),
1002*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_min_s16),
1003*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_max_s16),
1004*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_min_s32),
1005*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_max_s32),
1006*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpgt_s8),
1007*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmplt_s8),
1008*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpeq_8),
1009*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpgt_s16),
1010*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmplt_s16),
1011*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpeq_16),
1012*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpgt_s32),
1013*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmplt_s32),
1014*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_cmpeq_32),
1015*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shuffle_8),
1016*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_pshuffle_8),
1017*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_wideshuffle_8),
1018*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<1>),
1019*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<2>),
1020*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<3>),
1021*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<4>),
1022*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<5>),
1023*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<6>),
1024*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<7>),
1025*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<8>),
1026*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<9>),
1027*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<10>),
1028*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<11>),
1029*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<12>),
1030*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<13>),
1031*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<14>),
1032*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<15>),
1033*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<16>),
1034*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<17>),
1035*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<18>),
1036*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<19>),
1037*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<20>),
1038*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<21>),
1039*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<22>),
1040*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<23>),
1041*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<24>),
1042*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<25>),
1043*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<26>),
1044*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<27>),
1045*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<28>),
1046*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<29>),
1047*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<30>),
1048*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_align<31>),
1049*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_from_v128),
1050*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_zip_8),
1051*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_zip_16),
1052*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_zip_32),
1053*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_mul_s16),
1054*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpack_u8_s16),
1055*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpack_s8_s16),
1056*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpack_u16_s32),
1057*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpack_s16_s32),
1058*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shl_8),
1059*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_u8),
1060*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_s8),
1061*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shl_16),
1062*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_u16),
1063*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_s16),
1064*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shl_32),
1065*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_u32),
1066*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_s32),
1067*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shl_64),
1068*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_u64),
1069*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_shr_s64),
1070*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_abs_s8),
1071*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_abs_s16),
1072*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_padd_u8),
1073*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_padd_s16),
1074*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpacklo_u16_s32),
1075*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpacklo_s16_s32),
1076*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpackhi_u16_s32),
1077*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpackhi_s16_s32),
1078*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<1>),
1079*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<2>),
1080*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<3>),
1081*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<4>),
1082*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<5>),
1083*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<6>),
1084*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<7>),
1085*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<8>),
1086*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<9>),
1087*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<10>),
1088*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<11>),
1089*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<12>),
1090*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<13>),
1091*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<14>),
1092*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_word<15>),
1093*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<1>),
1094*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<2>),
1095*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<3>),
1096*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<4>),
1097*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<5>),
1098*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<6>),
1099*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<7>),
1100*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<8>),
1101*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<9>),
1102*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<10>),
1103*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<11>),
1104*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<12>),
1105*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<13>),
1106*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<14>),
1107*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_word<15>),
1108*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<1>),
1109*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<2>),
1110*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<3>),
1111*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<4>),
1112*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<5>),
1113*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<6>),
1114*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<7>),
1115*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<8>),
1116*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<9>),
1117*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<10>),
1118*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<11>),
1119*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<12>),
1120*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<13>),
1121*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<14>),
1122*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<15>),
1123*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<16>),
1124*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<17>),
1125*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<18>),
1126*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<19>),
1127*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<20>),
1128*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<21>),
1129*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<22>),
1130*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<23>),
1131*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<24>),
1132*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<25>),
1133*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<26>),
1134*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<27>),
1135*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<28>),
1136*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<29>),
1137*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<30>),
1138*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_byte<31>),
1139*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<1>),
1140*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<2>),
1141*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<3>),
1142*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<4>),
1143*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<5>),
1144*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<6>),
1145*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<7>),
1146*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<8>),
1147*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<9>),
1148*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<10>),
1149*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<11>),
1150*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<12>),
1151*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<13>),
1152*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<14>),
1153*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<15>),
1154*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<16>),
1155*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<17>),
1156*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<18>),
1157*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<19>),
1158*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<20>),
1159*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<21>),
1160*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<22>),
1161*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<23>),
1162*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<24>),
1163*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<25>),
1164*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<26>),
1165*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<27>),
1166*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<28>),
1167*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<29>),
1168*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<30>),
1169*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_byte<31>),
1170*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<1>),
1171*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<2>),
1172*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<3>),
1173*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<4>),
1174*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<5>),
1175*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<6>),
1176*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_8<7>),
1177*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<1>),
1178*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<2>),
1179*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<3>),
1180*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<4>),
1181*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<5>),
1182*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<6>),
1183*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u8<7>),
1184*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<1>),
1185*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<2>),
1186*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<3>),
1187*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<4>),
1188*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<5>),
1189*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<6>),
1190*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s8<7>),
1191*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<1>),
1192*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<2>),
1193*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<4>),
1194*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<6>),
1195*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<8>),
1196*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<10>),
1197*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<12>),
1198*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_16<14>),
1199*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<1>),
1200*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<2>),
1201*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<4>),
1202*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<6>),
1203*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<8>),
1204*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<10>),
1205*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<12>),
1206*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u16<14>),
1207*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<1>),
1208*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<2>),
1209*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<4>),
1210*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<6>),
1211*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<8>),
1212*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<10>),
1213*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<12>),
1214*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s16<14>),
1215*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<1>),
1216*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<4>),
1217*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<8>),
1218*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<12>),
1219*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<16>),
1220*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<20>),
1221*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<24>),
1222*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_32<28>),
1223*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<1>),
1224*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<4>),
1225*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<8>),
1226*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<12>),
1227*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<16>),
1228*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<20>),
1229*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<24>),
1230*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u32<28>),
1231*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<1>),
1232*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<4>),
1233*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<8>),
1234*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<12>),
1235*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<16>),
1236*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<20>),
1237*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<24>),
1238*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s32<28>),
1239*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<1>),
1240*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<4>),
1241*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<8>),
1242*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<12>),
1243*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<16>),
1244*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<20>),
1245*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<24>),
1246*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<28>),
1247*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<32>),
1248*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<36>),
1249*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<40>),
1250*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<44>),
1251*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<48>),
1252*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<52>),
1253*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<56>),
1254*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shl_n_64<60>),
1255*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<1>),
1256*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<4>),
1257*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<8>),
1258*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<12>),
1259*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<16>),
1260*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<20>),
1261*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<24>),
1262*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<28>),
1263*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<32>),
1264*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<36>),
1265*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<40>),
1266*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<44>),
1267*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<48>),
1268*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<52>),
1269*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<56>),
1270*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_u64<60>),
1271*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<1>),
1272*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<4>),
1273*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<8>),
1274*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<12>),
1275*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<16>),
1276*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<20>),
1277*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<24>),
1278*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<28>),
1279*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<32>),
1280*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<36>),
1281*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<40>),
1282*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<44>),
1283*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<48>),
1284*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<52>),
1285*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<56>),
1286*77c1e3ccSAndroid Build Coastguard Worker                      MAP(imm_v256_shr_n_s64<60>),
1287*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_movemask_8),
1288*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_zero),
1289*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dup_8),
1290*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dup_16),
1291*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dup_32),
1292*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_dup_64),
1293*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_low_u32),
1294*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_low_v64),
1295*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_from_64),
1296*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_from_v64),
1297*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziplo_128),
1298*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_ziphi_128),
1299*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpacklo_u8_s16),
1300*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpackhi_u8_s16),
1301*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpacklo_s8_s16),
1302*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_unpackhi_s8_s16),
1303*77c1e3ccSAndroid Build Coastguard Worker                      MAP(v256_blend_8),
1304*77c1e3ccSAndroid Build Coastguard Worker                      { nullptr, nullptr, nullptr } };
1305*77c1e3ccSAndroid Build Coastguard Worker#undef MAP
1306*77c1e3ccSAndroid Build Coastguard Worker
1307*77c1e3ccSAndroid Build Coastguard Worker// Map reference functions to machine tuned functions. Since the
1308*77c1e3ccSAndroid Build Coastguard Worker// functions depend on machine tuned types, the non-machine tuned
1309*77c1e3ccSAndroid Build Coastguard Worker// instantiations of the test can't refer to these functions directly,
1310*77c1e3ccSAndroid Build Coastguard Worker// so we refer to them by name and do the mapping here.
1311*77c1e3ccSAndroid Build Coastguard Workervoid Map(const char *name, fptr *ref, fptr *simd) {
1312*77c1e3ccSAndroid Build Coastguard Worker  unsigned int i;
1313*77c1e3ccSAndroid Build Coastguard Worker  for (i = 0; m[i].name && strcmp(name, m[i].name); i++) {
1314*77c1e3ccSAndroid Build Coastguard Worker  }
1315*77c1e3ccSAndroid Build Coastguard Worker
1316*77c1e3ccSAndroid Build Coastguard Worker  *ref = m[i].ref;
1317*77c1e3ccSAndroid Build Coastguard Worker  *simd = m[i].simd;
1318*77c1e3ccSAndroid Build Coastguard Worker}
1319*77c1e3ccSAndroid Build Coastguard Worker
1320*77c1e3ccSAndroid Build Coastguard Worker// Used for printing errors in TestSimd1Arg, TestSimd2Args and TestSimd3Args
1321*77c1e3ccSAndroid Build Coastguard Workerstd::string Print(const uint8_t *a, int size) {
1322*77c1e3ccSAndroid Build Coastguard Worker  std::string text = "0x";
1323*77c1e3ccSAndroid Build Coastguard Worker  for (int i = 0; i < size; i++) {
1324*77c1e3ccSAndroid Build Coastguard Worker    const uint8_t c = a[!CONFIG_BIG_ENDIAN ? size - 1 - i : i];
1325*77c1e3ccSAndroid Build Coastguard Worker    // Same as snprintf(..., ..., "%02x", c)
1326*77c1e3ccSAndroid Build Coastguard Worker    text += (c >> 4) + '0' + ((c >> 4) > 9) * ('a' - '0' - 10);
1327*77c1e3ccSAndroid Build Coastguard Worker    text += (c & 15) + '0' + ((c & 15) > 9) * ('a' - '0' - 10);
1328*77c1e3ccSAndroid Build Coastguard Worker  }
1329*77c1e3ccSAndroid Build Coastguard Worker
1330*77c1e3ccSAndroid Build Coastguard Worker  return text;
1331*77c1e3ccSAndroid Build Coastguard Worker}
1332*77c1e3ccSAndroid Build Coastguard Worker
1333*77c1e3ccSAndroid Build Coastguard Worker// Used in TestSimd1Arg, TestSimd2Args and TestSimd3Args to restrict argument
1334*77c1e3ccSAndroid Build Coastguard Worker// ranges
1335*77c1e3ccSAndroid Build Coastguard Workervoid SetMask(uint8_t *s, int size, uint32_t mask, uint32_t maskwidth) {
1336*77c1e3ccSAndroid Build Coastguard Worker  switch (maskwidth) {
1337*77c1e3ccSAndroid Build Coastguard Worker    case 0: {
1338*77c1e3ccSAndroid Build Coastguard Worker      break;
1339*77c1e3ccSAndroid Build Coastguard Worker    }
1340*77c1e3ccSAndroid Build Coastguard Worker    case 8: {
1341*77c1e3ccSAndroid Build Coastguard Worker      for (int i = 0; i < size; i++) s[i] &= mask;
1342*77c1e3ccSAndroid Build Coastguard Worker      break;
1343*77c1e3ccSAndroid Build Coastguard Worker    }
1344*77c1e3ccSAndroid Build Coastguard Worker    case 16: {
1345*77c1e3ccSAndroid Build Coastguard Worker      uint16_t *t = reinterpret_cast<uint16_t *>(s);
1346*77c1e3ccSAndroid Build Coastguard Worker      assert(!(reinterpret_cast<uintptr_t>(s) & 1));
1347*77c1e3ccSAndroid Build Coastguard Worker      for (int i = 0; i < size / 2; i++) t[i] &= mask;
1348*77c1e3ccSAndroid Build Coastguard Worker      break;
1349*77c1e3ccSAndroid Build Coastguard Worker    }
1350*77c1e3ccSAndroid Build Coastguard Worker    case 32: {
1351*77c1e3ccSAndroid Build Coastguard Worker      uint32_t *t = reinterpret_cast<uint32_t *>(s);
1352*77c1e3ccSAndroid Build Coastguard Worker      assert(!(reinterpret_cast<uintptr_t>(s) & 3));
1353*77c1e3ccSAndroid Build Coastguard Worker      for (int i = 0; i < size / 4; i++) t[i] &= mask;
1354*77c1e3ccSAndroid Build Coastguard Worker      break;
1355*77c1e3ccSAndroid Build Coastguard Worker    }
1356*77c1e3ccSAndroid Build Coastguard Worker    case 64: {
1357*77c1e3ccSAndroid Build Coastguard Worker      uint64_t *t = reinterpret_cast<uint64_t *>(s);
1358*77c1e3ccSAndroid Build Coastguard Worker      assert(!(reinterpret_cast<uintptr_t>(s) & 7));
1359*77c1e3ccSAndroid Build Coastguard Worker      for (int i = 0; i < size / 8; i++) t[i] &= mask;
1360*77c1e3ccSAndroid Build Coastguard Worker      break;
1361*77c1e3ccSAndroid Build Coastguard Worker    }
1362*77c1e3ccSAndroid Build Coastguard Worker    default: {
1363*77c1e3ccSAndroid Build Coastguard Worker      FAIL() << "Unsupported mask width";
1364*77c1e3ccSAndroid Build Coastguard Worker      break;
1365*77c1e3ccSAndroid Build Coastguard Worker    }
1366*77c1e3ccSAndroid Build Coastguard Worker  }
1367*77c1e3ccSAndroid Build Coastguard Worker}
1368*77c1e3ccSAndroid Build Coastguard Worker
1369*77c1e3ccSAndroid Build Coastguard Worker// We need some extra load/store functions
1370*77c1e3ccSAndroid Build Coastguard Workervoid u64_store_aligned(void *p, uint64_t a) {
1371*77c1e3ccSAndroid Build Coastguard Worker  v64_store_aligned(p, v64_from_64(a));
1372*77c1e3ccSAndroid Build Coastguard Worker}
1373*77c1e3ccSAndroid Build Coastguard Workervoid s32_store_aligned(void *p, int32_t a) {
1374*77c1e3ccSAndroid Build Coastguard Worker  u32_store_aligned(p, static_cast<uint32_t>(a));
1375*77c1e3ccSAndroid Build Coastguard Worker}
1376*77c1e3ccSAndroid Build Coastguard Workervoid s64_store_aligned(void *p, int64_t a) {
1377*77c1e3ccSAndroid Build Coastguard Worker  v64_store_aligned(p, v64_from_64(static_cast<uint64_t>(a)));
1378*77c1e3ccSAndroid Build Coastguard Worker}
1379*77c1e3ccSAndroid Build Coastguard Worker
1380*77c1e3ccSAndroid Build Coastguard Workervoid c_u64_store_aligned(void *p, uint64_t a) {
1381*77c1e3ccSAndroid Build Coastguard Worker  c_v64_store_aligned(p, c_v64_from_64(a));
1382*77c1e3ccSAndroid Build Coastguard Worker}
1383*77c1e3ccSAndroid Build Coastguard Worker
1384*77c1e3ccSAndroid Build Coastguard Workervoid c_s32_store_aligned(void *p, int32_t a) {
1385*77c1e3ccSAndroid Build Coastguard Worker  c_u32_store_aligned(p, static_cast<uint32_t>(a));
1386*77c1e3ccSAndroid Build Coastguard Worker}
1387*77c1e3ccSAndroid Build Coastguard Worker
1388*77c1e3ccSAndroid Build Coastguard Workervoid c_s64_store_aligned(void *p, int64_t a) {
1389*77c1e3ccSAndroid Build Coastguard Worker  c_v64_store_aligned(p, c_v64_from_64(static_cast<uint64_t>(a)));
1390*77c1e3ccSAndroid Build Coastguard Worker}
1391*77c1e3ccSAndroid Build Coastguard Worker
1392*77c1e3ccSAndroid Build Coastguard Workeruint64_t u64_load_aligned(const void *p) {
1393*77c1e3ccSAndroid Build Coastguard Worker  return v64_u64(v64_load_aligned(p));
1394*77c1e3ccSAndroid Build Coastguard Worker}
1395*77c1e3ccSAndroid Build Coastguard Workeruint16_t u16_load_aligned(const void *p) {
1396*77c1e3ccSAndroid Build Coastguard Worker  return *(reinterpret_cast<const uint16_t *>(p));
1397*77c1e3ccSAndroid Build Coastguard Worker}
1398*77c1e3ccSAndroid Build Coastguard Workeruint8_t u8_load_aligned(const void *p) {
1399*77c1e3ccSAndroid Build Coastguard Worker  return *(reinterpret_cast<const uint8_t *>(p));
1400*77c1e3ccSAndroid Build Coastguard Worker}
1401*77c1e3ccSAndroid Build Coastguard Worker
1402*77c1e3ccSAndroid Build Coastguard Workeruint64_t c_u64_load_aligned(const void *p) {
1403*77c1e3ccSAndroid Build Coastguard Worker  return c_v64_u64(c_v64_load_aligned(p));
1404*77c1e3ccSAndroid Build Coastguard Worker}
1405*77c1e3ccSAndroid Build Coastguard Workeruint16_t c_u16_load_aligned(const void *p) {
1406*77c1e3ccSAndroid Build Coastguard Worker  return *(reinterpret_cast<const uint16_t *>(p));
1407*77c1e3ccSAndroid Build Coastguard Worker}
1408*77c1e3ccSAndroid Build Coastguard Workeruint8_t c_u8_load_aligned(const void *p) {
1409*77c1e3ccSAndroid Build Coastguard Worker  return *(reinterpret_cast<const uint8_t *>(p));
1410*77c1e3ccSAndroid Build Coastguard Worker}
1411*77c1e3ccSAndroid Build Coastguard Worker
1412*77c1e3ccSAndroid Build Coastguard Worker// CompareSimd1Arg, CompareSimd2Args and CompareSimd3Args compare
1413*77c1e3ccSAndroid Build Coastguard Worker// intrinsics taking 1, 2 or 3 arguments respectively with their
1414*77c1e3ccSAndroid Build Coastguard Worker// corresponding C reference.  Ideally, the loads and stores should
1415*77c1e3ccSAndroid Build Coastguard Worker// have gone into the template parameter list, but v64 and v128 could
1416*77c1e3ccSAndroid Build Coastguard Worker// be typedef'ed to the same type (which is the case on x86) and then
1417*77c1e3ccSAndroid Build Coastguard Worker// we can't instantiate both v64 and v128, so the function return and
1418*77c1e3ccSAndroid Build Coastguard Worker// argument types, including the always differing types in the C
1419*77c1e3ccSAndroid Build Coastguard Worker// equivalent are used instead.  The function arguments must be void
1420*77c1e3ccSAndroid Build Coastguard Worker// pointers and then go through a cast to avoid matching errors in the
1421*77c1e3ccSAndroid Build Coastguard Worker// branches eliminated by the typeid tests in the calling function.
1422*77c1e3ccSAndroid Build Coastguard Workertemplate <typename Ret, typename Arg, typename CRet, typename CArg>
1423*77c1e3ccSAndroid Build Coastguard Workerint CompareSimd1Arg(fptr store, fptr load, fptr simd, void *d, fptr c_store,
1424*77c1e3ccSAndroid Build Coastguard Worker                    fptr c_load, fptr c_simd, void *ref_d, const void *a) {
1425*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
1426*77c1e3ccSAndroid Build Coastguard Worker  Arg (*const my_load)(const void *) = (Arg(*const)(const void *))load;
1427*77c1e3ccSAndroid Build Coastguard Worker  Ret (*const my_simd)(Arg) = (Ret(*const)(Arg))simd;
1428*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
1429*77c1e3ccSAndroid Build Coastguard Worker  CArg (*const my_c_load)(const void *) = (CArg(*const)(const void *))c_load;
1430*77c1e3ccSAndroid Build Coastguard Worker  CRet (*const my_c_simd)(CArg) = (CRet(*const)(CArg))c_simd;
1431*77c1e3ccSAndroid Build Coastguard Worker
1432*77c1e3ccSAndroid Build Coastguard Worker  // Call reference and intrinsic
1433*77c1e3ccSAndroid Build Coastguard Worker  my_c_store(ref_d, my_c_simd(my_c_load(a)));
1434*77c1e3ccSAndroid Build Coastguard Worker  my_store(d, my_simd(my_load(a)));
1435*77c1e3ccSAndroid Build Coastguard Worker
1436*77c1e3ccSAndroid Build Coastguard Worker  // Compare results
1437*77c1e3ccSAndroid Build Coastguard Worker  return memcmp(ref_d, d, sizeof(CRet));
1438*77c1e3ccSAndroid Build Coastguard Worker}
1439*77c1e3ccSAndroid Build Coastguard Worker
1440*77c1e3ccSAndroid Build Coastguard Workertemplate <typename Ret, typename Arg1, typename Arg2, typename CRet,
1441*77c1e3ccSAndroid Build Coastguard Worker          typename CArg1, typename CArg2>
1442*77c1e3ccSAndroid Build Coastguard Workerint CompareSimd2Args(fptr store, fptr load1, fptr load2, fptr simd, void *d,
1443*77c1e3ccSAndroid Build Coastguard Worker                     fptr c_store, fptr c_load1, fptr c_load2, fptr c_simd,
1444*77c1e3ccSAndroid Build Coastguard Worker                     void *ref_d, const void *a, const void *b) {
1445*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
1446*77c1e3ccSAndroid Build Coastguard Worker  Arg1 (*const my_load1)(const void *) = (Arg1(*const)(const void *))load1;
1447*77c1e3ccSAndroid Build Coastguard Worker  Arg2 (*const my_load2)(const void *) = (Arg2(*const)(const void *))load2;
1448*77c1e3ccSAndroid Build Coastguard Worker  Ret (*const my_simd)(Arg1, Arg2) = (Ret(*const)(Arg1, Arg2))simd;
1449*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
1450*77c1e3ccSAndroid Build Coastguard Worker  CArg1 (*const my_c_load1)(const void *) =
1451*77c1e3ccSAndroid Build Coastguard Worker      (CArg1(*const)(const void *))c_load1;
1452*77c1e3ccSAndroid Build Coastguard Worker  CArg2 (*const my_c_load2)(const void *) =
1453*77c1e3ccSAndroid Build Coastguard Worker      (CArg2(*const)(const void *))c_load2;
1454*77c1e3ccSAndroid Build Coastguard Worker  CRet (*const my_c_simd)(CArg1, CArg2) = (CRet(*const)(CArg1, CArg2))c_simd;
1455*77c1e3ccSAndroid Build Coastguard Worker
1456*77c1e3ccSAndroid Build Coastguard Worker  // Call reference and intrinsic
1457*77c1e3ccSAndroid Build Coastguard Worker  my_c_store(ref_d, my_c_simd(my_c_load1(a), my_c_load2(b)));
1458*77c1e3ccSAndroid Build Coastguard Worker  my_store(d, my_simd(my_load1(a), my_load2(b)));
1459*77c1e3ccSAndroid Build Coastguard Worker
1460*77c1e3ccSAndroid Build Coastguard Worker  // Compare results
1461*77c1e3ccSAndroid Build Coastguard Worker  return memcmp(ref_d, d, sizeof(CRet));
1462*77c1e3ccSAndroid Build Coastguard Worker}
1463*77c1e3ccSAndroid Build Coastguard Worker
1464*77c1e3ccSAndroid Build Coastguard Workertemplate <typename Ret, typename Arg1, typename Arg2, typename Arg3,
1465*77c1e3ccSAndroid Build Coastguard Worker          typename CRet, typename CArg1, typename CArg2, typename CArg3>
1466*77c1e3ccSAndroid Build Coastguard Workerint CompareSimd3Args(fptr store, fptr load1, fptr load2, fptr load3, fptr simd,
1467*77c1e3ccSAndroid Build Coastguard Worker                     void *d, fptr c_store, fptr c_load1, fptr c_load2,
1468*77c1e3ccSAndroid Build Coastguard Worker                     fptr c_load3, fptr c_simd, void *ref_d, const void *a,
1469*77c1e3ccSAndroid Build Coastguard Worker                     const void *b, const void *c) {
1470*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_store)(void *, Ret) = (void (*const)(void *, Ret))store;
1471*77c1e3ccSAndroid Build Coastguard Worker  Arg1 (*const my_load1)(const void *) = (Arg1(*const)(const void *))load1;
1472*77c1e3ccSAndroid Build Coastguard Worker  Arg2 (*const my_load2)(const void *) = (Arg2(*const)(const void *))load2;
1473*77c1e3ccSAndroid Build Coastguard Worker  Arg3 (*const my_load3)(const void *) = (Arg3(*const)(const void *))load3;
1474*77c1e3ccSAndroid Build Coastguard Worker  Ret (*const my_simd)(Arg1, Arg2, Arg3) = (Ret(*const)(Arg1, Arg2, Arg3))simd;
1475*77c1e3ccSAndroid Build Coastguard Worker  void (*const my_c_store)(void *, CRet) = (void (*const)(void *, CRet))c_store;
1476*77c1e3ccSAndroid Build Coastguard Worker  CArg1 (*const my_c_load1)(const void *) =
1477*77c1e3ccSAndroid Build Coastguard Worker      (CArg1(*const)(const void *))c_load1;
1478*77c1e3ccSAndroid Build Coastguard Worker  CArg2 (*const my_c_load2)(const void *) =
1479*77c1e3ccSAndroid Build Coastguard Worker      (CArg2(*const)(const void *))c_load2;
1480*77c1e3ccSAndroid Build Coastguard Worker  CArg3 (*const my_c_load3)(const void *) =
1481*77c1e3ccSAndroid Build Coastguard Worker      (CArg3(*const)(const void *))c_load3;
1482*77c1e3ccSAndroid Build Coastguard Worker  CRet (*const my_c_simd)(CArg1, CArg2, CArg3) =
1483*77c1e3ccSAndroid Build Coastguard Worker      (CRet(*const)(CArg1, CArg2, CArg3))c_simd;
1484*77c1e3ccSAndroid Build Coastguard Worker
1485*77c1e3ccSAndroid Build Coastguard Worker  // Call reference and intrinsic
1486*77c1e3ccSAndroid Build Coastguard Worker  my_c_store(ref_d, my_c_simd(my_c_load1(a), my_c_load2(b), my_c_load3(c)));
1487*77c1e3ccSAndroid Build Coastguard Worker  my_store(d, my_simd(my_load1(a), my_load2(b), my_load3(c)));
1488*77c1e3ccSAndroid Build Coastguard Worker
1489*77c1e3ccSAndroid Build Coastguard Worker  // Compare results
1490*77c1e3ccSAndroid Build Coastguard Worker  return memcmp(ref_d, d, sizeof(CRet));
1491*77c1e3ccSAndroid Build Coastguard Worker}
1492*77c1e3ccSAndroid Build Coastguard Worker
1493*77c1e3ccSAndroid Build Coastguard Worker}  // namespace
1494*77c1e3ccSAndroid Build Coastguard Worker
1495*77c1e3ccSAndroid Build Coastguard Workertemplate <typename CRet, typename CArg>
1496*77c1e3ccSAndroid Build Coastguard Workervoid TestSimd1Arg(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
1497*77c1e3ccSAndroid Build Coastguard Worker                  const char *name) {
1498*77c1e3ccSAndroid Build Coastguard Worker  ACMRandom rnd(ACMRandom::DeterministicSeed());
1499*77c1e3ccSAndroid Build Coastguard Worker  fptr ref_simd;
1500*77c1e3ccSAndroid Build Coastguard Worker  fptr simd;
1501*77c1e3ccSAndroid Build Coastguard Worker  int error = 0;
1502*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s[32]);
1503*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, d[32]);
1504*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
1505*77c1e3ccSAndroid Build Coastguard Worker  assert(sizeof(CArg) <= 32 && sizeof(CRet) <= 32);
1506*77c1e3ccSAndroid Build Coastguard Worker  memset(ref_d, 0, sizeof(ref_d));
1507*77c1e3ccSAndroid Build Coastguard Worker  memset(d, 0, sizeof(d));
1508*77c1e3ccSAndroid Build Coastguard Worker
1509*77c1e3ccSAndroid Build Coastguard Worker  Map(name, &ref_simd, &simd);
1510*77c1e3ccSAndroid Build Coastguard Worker  if (simd == nullptr || ref_simd == nullptr) {
1511*77c1e3ccSAndroid Build Coastguard Worker    FAIL() << "Internal error: Unknown intrinsic function " << name;
1512*77c1e3ccSAndroid Build Coastguard Worker  }
1513*77c1e3ccSAndroid Build Coastguard Worker  for (unsigned int count = 0;
1514*77c1e3ccSAndroid Build Coastguard Worker       count < iterations && !error && !testing::Test::HasFailure(); count++) {
1515*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg); c++) s[c] = rnd.Rand8();
1516*77c1e3ccSAndroid Build Coastguard Worker
1517*77c1e3ccSAndroid Build Coastguard Worker    if (maskwidth) {
1518*77c1e3ccSAndroid Build Coastguard Worker      SetMask(s, sizeof(CArg), mask, maskwidth);
1519*77c1e3ccSAndroid Build Coastguard Worker    }
1520*77c1e3ccSAndroid Build Coastguard Worker
1521*77c1e3ccSAndroid Build Coastguard Worker    if (typeid(CRet) == typeid(c_v64) && typeid(CArg) == typeid(c_v64)) {
1522*77c1e3ccSAndroid Build Coastguard Worker      // V64_V64
1523*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, v64, c_v64, c_v64>(
1524*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1525*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1526*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1527*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1528*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1529*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint8_t)) {
1530*77c1e3ccSAndroid Build Coastguard Worker      // V64_U8
1531*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, uint8_t, c_v64, uint8_t>(
1532*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1533*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u8_load_aligned), simd, d,
1534*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1535*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
1536*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1537*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint16_t)) {
1538*77c1e3ccSAndroid Build Coastguard Worker      // V64_U16
1539*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, uint16_t, c_v64, uint16_t>(
1540*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1541*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u16_load_aligned), simd, d,
1542*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1543*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
1544*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1545*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint32_t)) {
1546*77c1e3ccSAndroid Build Coastguard Worker      // V64_U32
1547*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, uint32_t, c_v64, uint32_t>(
1548*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1549*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1550*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1551*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
1552*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint64_t) &&
1553*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v64)) {
1554*77c1e3ccSAndroid Build Coastguard Worker      // U64_V64
1555*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint64_t, v64, uint64_t, c_v64>(
1556*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_store_aligned),
1557*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1558*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_store_aligned),
1559*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1560*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(int64_t) &&
1561*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v64)) {
1562*77c1e3ccSAndroid Build Coastguard Worker      // S64_V64
1563*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<int64_t, v64, int64_t, c_v64>(
1564*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(s64_store_aligned),
1565*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1566*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_s64_store_aligned),
1567*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1568*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1569*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v64)) {
1570*77c1e3ccSAndroid Build Coastguard Worker      // U32_V64
1571*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint32_t, v64, uint32_t, c_v64>(
1572*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1573*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1574*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1575*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1576*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(int32_t) &&
1577*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v64)) {
1578*77c1e3ccSAndroid Build Coastguard Worker      // S32_V64
1579*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<int32_t, v64, int32_t, c_v64>(
1580*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(s32_store_aligned),
1581*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1582*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_s32_store_aligned),
1583*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1584*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1585*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v128)) {
1586*77c1e3ccSAndroid Build Coastguard Worker      // U32_V128
1587*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint32_t, v128, uint32_t, c_v128>(
1588*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1589*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1590*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1591*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
1592*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint64_t) &&
1593*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v128)) {
1594*77c1e3ccSAndroid Build Coastguard Worker      // U64_V128
1595*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint64_t, v128, uint64_t, c_v128>(
1596*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_store_aligned),
1597*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1598*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_store_aligned),
1599*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
1600*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint64_t) &&
1601*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v256)) {
1602*77c1e3ccSAndroid Build Coastguard Worker      // U64_V256
1603*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint64_t, v256, uint64_t, c_v256>(
1604*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_store_aligned),
1605*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1606*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_store_aligned),
1607*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
1608*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1609*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v128)) {
1610*77c1e3ccSAndroid Build Coastguard Worker      // V64_V128
1611*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, v128, c_v64, c_v128>(
1612*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1613*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1614*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1615*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
1616*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1617*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v128)) {
1618*77c1e3ccSAndroid Build Coastguard Worker      // V128_V128
1619*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, v128, c_v128, c_v128>(
1620*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1621*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1622*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1623*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
1624*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1625*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v64)) {
1626*77c1e3ccSAndroid Build Coastguard Worker      // V128_V64
1627*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, v64, c_v128, c_v64>(
1628*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1629*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1630*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1631*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned), ref_simd, ref_d, s);
1632*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1633*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint8_t)) {
1634*77c1e3ccSAndroid Build Coastguard Worker      // V128_U8
1635*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, uint8_t, c_v128, uint8_t>(
1636*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1637*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u8_load_aligned), simd, d,
1638*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1639*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
1640*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1641*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint16_t)) {
1642*77c1e3ccSAndroid Build Coastguard Worker      // V128_U16
1643*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, uint16_t, c_v128, uint16_t>(
1644*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1645*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u16_load_aligned), simd, d,
1646*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1647*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
1648*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1649*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint32_t)) {
1650*77c1e3ccSAndroid Build Coastguard Worker      // V128_U32
1651*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, uint32_t, c_v128, uint32_t>(
1652*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1653*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1654*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1655*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
1656*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1657*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint64_t)) {
1658*77c1e3ccSAndroid Build Coastguard Worker      // V128_U64
1659*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v128, uint64_t, c_v128, uint64_t>(
1660*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1661*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_load_aligned), simd, d,
1662*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1663*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_load_aligned), ref_simd, ref_d, s);
1664*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1665*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v256)) {
1666*77c1e3ccSAndroid Build Coastguard Worker      // V256_V256
1667*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, v256, c_v256, c_v256>(
1668*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1669*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1670*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1671*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
1672*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1673*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v128)) {
1674*77c1e3ccSAndroid Build Coastguard Worker      // V256_V128
1675*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, v128, c_v256, c_v128>(
1676*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1677*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1678*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1679*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned), ref_simd, ref_d, s);
1680*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1681*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint8_t)) {
1682*77c1e3ccSAndroid Build Coastguard Worker      // V256_U8
1683*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, uint8_t, c_v256, uint8_t>(
1684*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1685*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u8_load_aligned), simd, d,
1686*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1687*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u8_load_aligned), ref_simd, ref_d, s);
1688*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1689*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint16_t)) {
1690*77c1e3ccSAndroid Build Coastguard Worker      // V256_U16
1691*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, uint16_t, c_v256, uint16_t>(
1692*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1693*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u16_load_aligned), simd, d,
1694*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1695*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u16_load_aligned), ref_simd, ref_d, s);
1696*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1697*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint32_t)) {
1698*77c1e3ccSAndroid Build Coastguard Worker      // V256_U32
1699*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, uint32_t, c_v256, uint32_t>(
1700*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1701*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1702*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1703*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned), ref_simd, ref_d, s);
1704*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1705*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(uint64_t)) {
1706*77c1e3ccSAndroid Build Coastguard Worker      // V256_U64
1707*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v256, uint64_t, c_v256, uint64_t>(
1708*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1709*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_load_aligned), simd, d,
1710*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1711*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_load_aligned), ref_simd, ref_d, s);
1712*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1713*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v256)) {
1714*77c1e3ccSAndroid Build Coastguard Worker      // U32_V256
1715*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<uint32_t, v256, uint32_t, c_v256>(
1716*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1717*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1718*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1719*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
1720*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1721*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg) == typeid(c_v256)) {
1722*77c1e3ccSAndroid Build Coastguard Worker      // V64_V256
1723*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd1Arg<v64, v256, c_v64, c_v256>(
1724*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1725*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1726*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1727*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned), ref_simd, ref_d, s);
1728*77c1e3ccSAndroid Build Coastguard Worker    } else {
1729*77c1e3ccSAndroid Build Coastguard Worker      FAIL() << "Internal error: Unknown intrinsic function "
1730*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CRet).name() << " " << name << "(" << typeid(CArg).name()
1731*77c1e3ccSAndroid Build Coastguard Worker             << ")";
1732*77c1e3ccSAndroid Build Coastguard Worker    }
1733*77c1e3ccSAndroid Build Coastguard Worker  }
1734*77c1e3ccSAndroid Build Coastguard Worker
1735*77c1e3ccSAndroid Build Coastguard Worker  EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
1736*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s, sizeof(CArg)) << ") -> "
1737*77c1e3ccSAndroid Build Coastguard Worker                      << Print(d, sizeof(CRet)) << " (simd), "
1738*77c1e3ccSAndroid Build Coastguard Worker                      << Print(ref_d, sizeof(CRet)) << " (ref)";
1739*77c1e3ccSAndroid Build Coastguard Worker}
1740*77c1e3ccSAndroid Build Coastguard Worker
1741*77c1e3ccSAndroid Build Coastguard Workertemplate <typename CRet, typename CArg1, typename CArg2>
1742*77c1e3ccSAndroid Build Coastguard Workervoid TestSimd2Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
1743*77c1e3ccSAndroid Build Coastguard Worker                   const char *name) {
1744*77c1e3ccSAndroid Build Coastguard Worker  ACMRandom rnd(ACMRandom::DeterministicSeed());
1745*77c1e3ccSAndroid Build Coastguard Worker  fptr ref_simd;
1746*77c1e3ccSAndroid Build Coastguard Worker  fptr simd;
1747*77c1e3ccSAndroid Build Coastguard Worker  int error = 0;
1748*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s1[32]);
1749*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s2[32]);
1750*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, d[32]);
1751*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
1752*77c1e3ccSAndroid Build Coastguard Worker  assert(sizeof(CArg1) <= 32 && sizeof(CArg2) <= 32 && sizeof(CRet) <= 32);
1753*77c1e3ccSAndroid Build Coastguard Worker  memset(ref_d, 0, sizeof(ref_d));
1754*77c1e3ccSAndroid Build Coastguard Worker  memset(d, 0, sizeof(d));
1755*77c1e3ccSAndroid Build Coastguard Worker
1756*77c1e3ccSAndroid Build Coastguard Worker  Map(name, &ref_simd, &simd);
1757*77c1e3ccSAndroid Build Coastguard Worker  if (simd == nullptr || ref_simd == nullptr) {
1758*77c1e3ccSAndroid Build Coastguard Worker    FAIL() << "Internal error: Unknown intrinsic function " << name;
1759*77c1e3ccSAndroid Build Coastguard Worker  }
1760*77c1e3ccSAndroid Build Coastguard Worker
1761*77c1e3ccSAndroid Build Coastguard Worker  for (unsigned int count = 0;
1762*77c1e3ccSAndroid Build Coastguard Worker       count < iterations && !error && !testing::Test::HasFailure(); count++) {
1763*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg1); c++) s1[c] = rnd.Rand8();
1764*77c1e3ccSAndroid Build Coastguard Worker
1765*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg2); c++) s2[c] = rnd.Rand8();
1766*77c1e3ccSAndroid Build Coastguard Worker
1767*77c1e3ccSAndroid Build Coastguard Worker    if (maskwidth) SetMask(s2, sizeof(CArg2), mask, maskwidth);
1768*77c1e3ccSAndroid Build Coastguard Worker
1769*77c1e3ccSAndroid Build Coastguard Worker    if (typeid(CRet) == typeid(c_v64) && typeid(CArg1) == typeid(c_v64) &&
1770*77c1e3ccSAndroid Build Coastguard Worker        typeid(CArg2) == typeid(c_v64)) {
1771*77c1e3ccSAndroid Build Coastguard Worker      // V64_V64V64
1772*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v64, v64, v64, c_v64, c_v64, c_v64>(
1773*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1774*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned),
1775*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1776*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1777*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1778*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1779*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1780*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1781*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(uint32_t) &&
1782*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(uint32_t)) {
1783*77c1e3ccSAndroid Build Coastguard Worker      // V64_U32U32
1784*77c1e3ccSAndroid Build Coastguard Worker      error =
1785*77c1e3ccSAndroid Build Coastguard Worker          CompareSimd2Args<v64, uint32_t, uint32_t, c_v64, uint32_t, uint32_t>(
1786*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(v64_store_aligned),
1787*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(u32_load_aligned),
1788*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1789*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(c_v64_store_aligned),
1790*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(c_u32_load_aligned),
1791*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(c_u32_load_aligned),
1792*77c1e3ccSAndroid Build Coastguard Worker              reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1793*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1794*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v64) &&
1795*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v64)) {
1796*77c1e3ccSAndroid Build Coastguard Worker      // U32_V64V64
1797*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<uint32_t, v64, v64, uint32_t, c_v64, c_v64>(
1798*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1799*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned),
1800*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1801*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1802*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1803*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1804*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1805*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(int64_t) &&
1806*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v64) &&
1807*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v64)) {
1808*77c1e3ccSAndroid Build Coastguard Worker      // S64_V64V64
1809*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<int64_t, v64, v64, int64_t, c_v64, c_v64>(
1810*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(s64_store_aligned),
1811*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned),
1812*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1813*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_s64_store_aligned),
1814*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1815*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1816*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1817*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v64) &&
1818*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v64) &&
1819*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(uint32_t)) {
1820*77c1e3ccSAndroid Build Coastguard Worker      // V64_V64U32
1821*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v64, v64, uint32_t, c_v64, c_v64, uint32_t>(
1822*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_store_aligned),
1823*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned),
1824*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1825*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_store_aligned),
1826*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1827*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned),
1828*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1829*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1830*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1831*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v128)) {
1832*77c1e3ccSAndroid Build Coastguard Worker      // V128_V128V128
1833*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v128, v128, v128, c_v128, c_v128, c_v128>(
1834*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1835*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1836*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1837*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1838*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1839*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1840*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1841*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1842*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1843*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v128)) {
1844*77c1e3ccSAndroid Build Coastguard Worker      // U32_V128V128
1845*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<uint32_t, v128, v128, uint32_t, c_v128, c_v128>(
1846*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1847*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1848*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1849*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1850*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1851*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1852*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1853*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint64_t) &&
1854*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1855*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v128)) {
1856*77c1e3ccSAndroid Build Coastguard Worker      // U64_V128V128
1857*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<uint64_t, v128, v128, uint64_t, c_v128, c_v128>(
1858*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_store_aligned),
1859*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1860*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1861*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_store_aligned),
1862*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1863*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1864*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1865*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(int64_t) &&
1866*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1867*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v128)) {
1868*77c1e3ccSAndroid Build Coastguard Worker      // S64_V128V128
1869*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<int64_t, v128, v128, int64_t, c_v128, c_v128>(
1870*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(s64_store_aligned),
1871*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1872*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1873*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_s64_store_aligned),
1874*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1875*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1876*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1877*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1878*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(uint64_t) &&
1879*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(uint64_t)) {
1880*77c1e3ccSAndroid Build Coastguard Worker      // V128_U64U64
1881*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v128, uint64_t, uint64_t, c_v128, uint64_t,
1882*77c1e3ccSAndroid Build Coastguard Worker                               uint64_t>(
1883*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1884*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_load_aligned),
1885*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_load_aligned), simd, d,
1886*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1887*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_load_aligned),
1888*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_load_aligned),
1889*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1890*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1891*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v64) &&
1892*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v64)) {
1893*77c1e3ccSAndroid Build Coastguard Worker      // V128_V64V64
1894*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v128, v64, v64, c_v128, c_v64, c_v64>(
1895*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1896*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned),
1897*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v64_load_aligned), simd, d,
1898*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1899*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1900*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v64_load_aligned),
1901*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1902*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v128) &&
1903*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1904*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(uint32_t)) {
1905*77c1e3ccSAndroid Build Coastguard Worker      // V128_V128U32
1906*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v128, v128, uint32_t, c_v128, c_v128, uint32_t>(
1907*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
1908*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1909*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1910*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
1911*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1912*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned),
1913*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1914*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1915*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
1916*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v256)) {
1917*77c1e3ccSAndroid Build Coastguard Worker      // V256_V256V256
1918*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v256, v256, v256, c_v256, c_v256, c_v256>(
1919*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1920*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
1921*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1922*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1923*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1924*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1925*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1926*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint64_t) &&
1927*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
1928*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v256)) {
1929*77c1e3ccSAndroid Build Coastguard Worker      // U64_V256V256
1930*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<uint64_t, v256, v256, uint64_t, c_v256, c_v256>(
1931*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u64_store_aligned),
1932*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
1933*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1934*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u64_store_aligned),
1935*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1936*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1937*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1938*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(int64_t) &&
1939*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
1940*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v256)) {
1941*77c1e3ccSAndroid Build Coastguard Worker      // S64_V256V256
1942*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<int64_t, v256, v256, int64_t, c_v256, c_v256>(
1943*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(s64_store_aligned),
1944*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
1945*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1946*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_s64_store_aligned),
1947*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1948*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1949*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1950*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(uint32_t) &&
1951*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
1952*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v256)) {
1953*77c1e3ccSAndroid Build Coastguard Worker      // U32_V256V256
1954*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<uint32_t, v256, v256, uint32_t, c_v256, c_v256>(
1955*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_store_aligned),
1956*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
1957*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
1958*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_store_aligned),
1959*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1960*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1961*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1962*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1963*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v128) &&
1964*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v128)) {
1965*77c1e3ccSAndroid Build Coastguard Worker      // V256_V128V128
1966*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v256, v128, v128, c_v256, c_v128, c_v128>(
1967*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1968*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
1969*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
1970*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1971*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1972*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
1973*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1974*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
1975*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
1976*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(uint32_t)) {
1977*77c1e3ccSAndroid Build Coastguard Worker      // V256_V256U32
1978*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd2Args<v256, v256, uint32_t, c_v256, c_v256, uint32_t>(
1979*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
1980*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
1981*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(u32_load_aligned), simd, d,
1982*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
1983*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
1984*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_u32_load_aligned),
1985*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2);
1986*77c1e3ccSAndroid Build Coastguard Worker
1987*77c1e3ccSAndroid Build Coastguard Worker    } else {
1988*77c1e3ccSAndroid Build Coastguard Worker      FAIL() << "Internal error: Unknown intrinsic function "
1989*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CRet).name() << " " << name << "("
1990*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CArg1).name() << ", " << typeid(CArg2).name() << ")";
1991*77c1e3ccSAndroid Build Coastguard Worker    }
1992*77c1e3ccSAndroid Build Coastguard Worker  }
1993*77c1e3ccSAndroid Build Coastguard Worker
1994*77c1e3ccSAndroid Build Coastguard Worker  EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
1995*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s1, sizeof(CArg1)) << ", "
1996*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s2, sizeof(CArg2)) << ") -> "
1997*77c1e3ccSAndroid Build Coastguard Worker                      << Print(d, sizeof(CRet)) << " (simd), "
1998*77c1e3ccSAndroid Build Coastguard Worker                      << Print(ref_d, sizeof(CRet)) << " (ref)";
1999*77c1e3ccSAndroid Build Coastguard Worker}
2000*77c1e3ccSAndroid Build Coastguard Worker
2001*77c1e3ccSAndroid Build Coastguard Workertemplate <typename CRet, typename CArg1, typename CArg2, typename CArg3>
2002*77c1e3ccSAndroid Build Coastguard Workervoid TestSimd3Args(uint32_t iterations, uint32_t mask, uint32_t maskwidth,
2003*77c1e3ccSAndroid Build Coastguard Worker                   const char *name) {
2004*77c1e3ccSAndroid Build Coastguard Worker  ACMRandom rnd(ACMRandom::DeterministicSeed());
2005*77c1e3ccSAndroid Build Coastguard Worker  fptr ref_simd;
2006*77c1e3ccSAndroid Build Coastguard Worker  fptr simd;
2007*77c1e3ccSAndroid Build Coastguard Worker  int error = 0;
2008*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s1[32]);
2009*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s2[32]);
2010*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, s3[32]);
2011*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, d[32]);
2012*77c1e3ccSAndroid Build Coastguard Worker  DECLARE_ALIGNED(32, uint8_t, ref_d[32]);
2013*77c1e3ccSAndroid Build Coastguard Worker  assert(sizeof(CArg1) <= 32 && sizeof(CArg2) <= 32 && sizeof(CArg3) <= 32 &&
2014*77c1e3ccSAndroid Build Coastguard Worker         sizeof(CRet) <= 32);
2015*77c1e3ccSAndroid Build Coastguard Worker  memset(ref_d, 0, sizeof(ref_d));
2016*77c1e3ccSAndroid Build Coastguard Worker  memset(d, 0, sizeof(d));
2017*77c1e3ccSAndroid Build Coastguard Worker
2018*77c1e3ccSAndroid Build Coastguard Worker  Map(name, &ref_simd, &simd);
2019*77c1e3ccSAndroid Build Coastguard Worker  if (simd == nullptr || ref_simd == nullptr) {
2020*77c1e3ccSAndroid Build Coastguard Worker    FAIL() << "Internal error: Unknown intrinsic function " << name;
2021*77c1e3ccSAndroid Build Coastguard Worker  }
2022*77c1e3ccSAndroid Build Coastguard Worker
2023*77c1e3ccSAndroid Build Coastguard Worker  for (unsigned int count = 0;
2024*77c1e3ccSAndroid Build Coastguard Worker       count < iterations && !error && !testing::Test::HasFailure(); count++) {
2025*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg1); c++) s1[c] = rnd.Rand8();
2026*77c1e3ccSAndroid Build Coastguard Worker
2027*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg2); c++) s2[c] = rnd.Rand8();
2028*77c1e3ccSAndroid Build Coastguard Worker
2029*77c1e3ccSAndroid Build Coastguard Worker    for (unsigned int c = 0; c < sizeof(CArg3); c++) s3[c] = rnd.Rand8();
2030*77c1e3ccSAndroid Build Coastguard Worker
2031*77c1e3ccSAndroid Build Coastguard Worker    if (maskwidth) SetMask(s3, sizeof(CArg3), mask, maskwidth);
2032*77c1e3ccSAndroid Build Coastguard Worker
2033*77c1e3ccSAndroid Build Coastguard Worker    if (typeid(CRet) == typeid(c_v128) && typeid(CArg1) == typeid(c_v128) &&
2034*77c1e3ccSAndroid Build Coastguard Worker        typeid(CArg2) == typeid(c_v128) && typeid(CArg3) == typeid(c_v128)) {
2035*77c1e3ccSAndroid Build Coastguard Worker      // V128_V128V128V128
2036*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd3Args<v128, v128, v128, v128, c_v128, c_v128, c_v128,
2037*77c1e3ccSAndroid Build Coastguard Worker                               c_v128>(
2038*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_store_aligned),
2039*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
2040*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned),
2041*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v128_load_aligned), simd, d,
2042*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_store_aligned),
2043*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
2044*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
2045*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v128_load_aligned),
2046*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2, s3);
2047*77c1e3ccSAndroid Build Coastguard Worker    } else if (typeid(CRet) == typeid(c_v256) &&
2048*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg1) == typeid(c_v256) &&
2049*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg2) == typeid(c_v256) &&
2050*77c1e3ccSAndroid Build Coastguard Worker               typeid(CArg3) == typeid(c_v256)) {
2051*77c1e3ccSAndroid Build Coastguard Worker      // V256_V256V256V256
2052*77c1e3ccSAndroid Build Coastguard Worker      error = CompareSimd3Args<v256, v256, v256, v256, c_v256, c_v256, c_v256,
2053*77c1e3ccSAndroid Build Coastguard Worker                               c_v256>(
2054*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_store_aligned),
2055*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
2056*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned),
2057*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(v256_load_aligned), simd, d,
2058*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_store_aligned),
2059*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
2060*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
2061*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(c_v256_load_aligned),
2062*77c1e3ccSAndroid Build Coastguard Worker          reinterpret_cast<fptr>(ref_simd), ref_d, s1, s2, s3);
2063*77c1e3ccSAndroid Build Coastguard Worker    } else {
2064*77c1e3ccSAndroid Build Coastguard Worker      FAIL() << "Internal error: Unknown intrinsic function "
2065*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CRet).name() << " " << name << "("
2066*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CArg1).name() << ", " << typeid(CArg2).name() << ", "
2067*77c1e3ccSAndroid Build Coastguard Worker             << typeid(CArg3).name() << ")";
2068*77c1e3ccSAndroid Build Coastguard Worker    }
2069*77c1e3ccSAndroid Build Coastguard Worker  }
2070*77c1e3ccSAndroid Build Coastguard Worker
2071*77c1e3ccSAndroid Build Coastguard Worker  EXPECT_EQ(0, error) << "Error: mismatch for " << name << "("
2072*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s1, sizeof(CArg1)) << ", "
2073*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s2, sizeof(CArg2)) << ", "
2074*77c1e3ccSAndroid Build Coastguard Worker                      << Print(s3, sizeof(CArg3)) << ") -> "
2075*77c1e3ccSAndroid Build Coastguard Worker                      << Print(d, sizeof(CRet)) << " (simd), "
2076*77c1e3ccSAndroid Build Coastguard Worker                      << Print(ref_d, sizeof(CRet)) << " (ref)";
2077*77c1e3ccSAndroid Build Coastguard Worker}
2078*77c1e3ccSAndroid Build Coastguard Worker
2079*77c1e3ccSAndroid Build Coastguard Worker// Instantiations to make the functions callable from another files
2080*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, uint8_t>(uint32_t, uint32_t, uint32_t,
2081*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2082*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, uint16_t>(uint32_t, uint32_t, uint32_t,
2083*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2084*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, uint32_t>(uint32_t, uint32_t, uint32_t,
2085*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2086*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
2087*77c1e3ccSAndroid Build Coastguard Worker                                         const char *);
2088*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint32_t, c_v64>(uint32_t, uint32_t, uint32_t,
2089*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2090*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<int32_t, c_v64>(uint32_t, uint32_t, uint32_t,
2091*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2092*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint64_t, c_v64>(uint32_t, uint32_t, uint32_t,
2093*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2094*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<int64_t, c_v64>(uint32_t, uint32_t, uint32_t,
2095*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2096*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v64, uint32_t, uint32_t>(uint32_t, uint32_t,
2097*77c1e3ccSAndroid Build Coastguard Worker                                                       uint32_t, const char *);
2098*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v64, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
2099*77c1e3ccSAndroid Build Coastguard Worker                                                 const char *);
2100*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v64, c_v64, uint32_t>(uint32_t, uint32_t,
2101*77c1e3ccSAndroid Build Coastguard Worker                                                    uint32_t, const char *);
2102*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<int64_t, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
2103*77c1e3ccSAndroid Build Coastguard Worker                                                   const char *);
2104*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<uint32_t, c_v64, c_v64>(uint32_t, uint32_t,
2105*77c1e3ccSAndroid Build Coastguard Worker                                                    uint32_t, const char *);
2106*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, c_v128>(uint32_t, uint32_t, uint32_t,
2107*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2108*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, uint8_t>(uint32_t, uint32_t, uint32_t,
2109*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2110*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, uint16_t>(uint32_t, uint32_t, uint32_t,
2111*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2112*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, uint32_t>(uint32_t, uint32_t, uint32_t,
2113*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2114*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, uint64_t>(uint32_t, uint32_t, uint32_t,
2115*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2116*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v128, c_v64>(uint32_t, uint32_t, uint32_t,
2117*77c1e3ccSAndroid Build Coastguard Worker                                          const char *);
2118*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint32_t, c_v128>(uint32_t, uint32_t, uint32_t,
2119*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2120*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint64_t, c_v128>(uint32_t, uint32_t, uint32_t,
2121*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2122*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, c_v128>(uint32_t, uint32_t, uint32_t,
2123*77c1e3ccSAndroid Build Coastguard Worker                                          const char *);
2124*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v128, c_v128, c_v128>(uint32_t, uint32_t,
2125*77c1e3ccSAndroid Build Coastguard Worker                                                    uint32_t, const char *);
2126*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v128, c_v128, uint32_t>(uint32_t, uint32_t,
2127*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2128*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v128, uint64_t, uint64_t>(uint32_t, uint32_t,
2129*77c1e3ccSAndroid Build Coastguard Worker                                                        uint32_t, const char *);
2130*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v128, c_v64, c_v64>(uint32_t, uint32_t, uint32_t,
2131*77c1e3ccSAndroid Build Coastguard Worker                                                  const char *);
2132*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<uint64_t, c_v128, c_v128>(uint32_t, uint32_t,
2133*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2134*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<int64_t, c_v128, c_v128>(uint32_t, uint32_t,
2135*77c1e3ccSAndroid Build Coastguard Worker                                                     uint32_t, const char *);
2136*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<uint32_t, c_v128, c_v128>(uint32_t, uint32_t,
2137*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2138*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd3Args<c_v128, c_v128, c_v128, c_v128>(uint32_t, uint32_t,
2139*77c1e3ccSAndroid Build Coastguard Worker                                                            uint32_t,
2140*77c1e3ccSAndroid Build Coastguard Worker                                                            const char *);
2141*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, c_v128>(uint32_t, uint32_t, uint32_t,
2142*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2143*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, c_v256>(uint32_t, uint32_t, uint32_t,
2144*77c1e3ccSAndroid Build Coastguard Worker                                           const char *);
2145*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint64_t, c_v256>(uint32_t, uint32_t, uint32_t,
2146*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2147*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, uint8_t>(uint32_t, uint32_t, uint32_t,
2148*77c1e3ccSAndroid Build Coastguard Worker                                            const char *);
2149*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, uint16_t>(uint32_t, uint32_t, uint32_t,
2150*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2151*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, uint32_t>(uint32_t, uint32_t, uint32_t,
2152*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2153*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v256, uint64_t>(uint32_t, uint32_t, uint32_t,
2154*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2155*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<uint32_t, c_v256>(uint32_t, uint32_t, uint32_t,
2156*77c1e3ccSAndroid Build Coastguard Worker                                             const char *);
2157*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd1Arg<c_v64, c_v256>(uint32_t, uint32_t, uint32_t,
2158*77c1e3ccSAndroid Build Coastguard Worker                                          const char *);
2159*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v256, c_v128, c_v128>(uint32_t, uint32_t,
2160*77c1e3ccSAndroid Build Coastguard Worker                                                    uint32_t, const char *);
2161*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v256, c_v256, c_v256>(uint32_t, uint32_t,
2162*77c1e3ccSAndroid Build Coastguard Worker                                                    uint32_t, const char *);
2163*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<c_v256, c_v256, uint32_t>(uint32_t, uint32_t,
2164*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2165*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<uint64_t, c_v256, c_v256>(uint32_t, uint32_t,
2166*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2167*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<int64_t, c_v256, c_v256>(uint32_t, uint32_t,
2168*77c1e3ccSAndroid Build Coastguard Worker                                                     uint32_t, const char *);
2169*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd2Args<uint32_t, c_v256, c_v256>(uint32_t, uint32_t,
2170*77c1e3ccSAndroid Build Coastguard Worker                                                      uint32_t, const char *);
2171*77c1e3ccSAndroid Build Coastguard Workertemplate void TestSimd3Args<c_v256, c_v256, c_v256, c_v256>(uint32_t, uint32_t,
2172*77c1e3ccSAndroid Build Coastguard Worker                                                            uint32_t,
2173*77c1e3ccSAndroid Build Coastguard Worker                                                            const char *);
2174*77c1e3ccSAndroid Build Coastguard Worker
2175*77c1e3ccSAndroid Build Coastguard Worker}  // namespace SIMD_NAMESPACE
2176