• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2020 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package android
16
17var archVariants = map[ArchType][]string{
18	Arm: {
19		"armv7-a-neon",
20		"armv8-a",
21		"armv8-2a",
22	},
23	Arm64: {
24		"armv8-a",
25		"armv8-a-branchprot",
26		"armv8-2a",
27		"armv8-2a-dotprod",
28		"armv9-a",
29		"armv9-2a",
30		"armv9-3a",
31		"armv9-4a",
32	},
33	X86: {
34		"alderlake",
35		"amberlake",
36		"atom",
37		"broadwell",
38		"goldmont",
39		"goldmont-plus",
40		// Target arch is goldmont, but without supporting SHA and XSAVES.
41		// This ensures efficient execution on a broad range of Intel/AMD CPUs used
42		// in Chromebooks, including those lacking SHA or XSAVES support.
43		// (e.g. Kaby Lake, Gemini Lake, Alder Lake and AMD Zen series)
44		"goldmont-without-sha-xsaves",
45		"haswell",
46		"icelake",
47		"ivybridge",
48		"kabylake",
49		"sandybridge",
50		"silvermont",
51		"skylake",
52		"stoneyridge",
53		"tigerlake",
54		"tremont",
55		"whiskeylake",
56		"x86_64",
57	},
58	X86_64: {
59		"alderlake",
60		"amberlake",
61		"broadwell",
62		"goldmont",
63		"goldmont-plus",
64		"goldmont-without-sha-xsaves",
65		"haswell",
66		"icelake",
67		"ivybridge",
68		"kabylake",
69		"sandybridge",
70		"silvermont",
71		"skylake",
72		"stoneyridge",
73		"tigerlake",
74		"tremont",
75		"whiskeylake",
76	},
77}
78
79var cpuVariants = map[ArchType][]string{
80	Arm: {
81		"cortex-a7",
82		"cortex-a8",
83		"cortex-a9",
84		"cortex-a15",
85		"cortex-a32",
86		"cortex-a53",
87		"cortex-a53.a57",
88		"cortex-a55",
89		"cortex-a72",
90		"cortex-a73",
91		"cortex-a75",
92		"cortex-a76",
93		"krait",
94		"kryo",
95		"kryo385",
96		"exynos-m1",
97		"exynos-m2",
98	},
99	Arm64: {
100		"cortex-a53",
101		"cortex-a55",
102		"cortex-a72",
103		"cortex-a73",
104		"cortex-a75",
105		"cortex-a76",
106		"kryo",
107		"kryo385",
108		"exynos-m1",
109		"exynos-m2",
110		"oryon",
111	},
112	X86:    {},
113	X86_64: {},
114}
115
116var archFeatures = map[ArchType][]string{
117	Arm64: {
118		"dotprod",
119	},
120	X86: {
121		"ssse3",
122		"sse4",
123		"sse4_1",
124		"sse4_2",
125		"aes_ni",
126		"avx",
127		"avx2",
128		"avx512",
129		"popcnt",
130		"movbe",
131	},
132	X86_64: {
133		"ssse3",
134		"sse4",
135		"sse4_1",
136		"sse4_2",
137		"aes_ni",
138		"avx",
139		"avx2",
140		"avx512",
141		"popcnt",
142	},
143}
144
145var androidArchFeatureMap = map[ArchType]map[string][]string{
146	Arm64: {
147		"armv8-2a-dotprod": {
148			"dotprod",
149		},
150		"armv9-a": {
151			"dotprod",
152		},
153		"armv9-2a": {
154			"dotprod",
155		},
156		"armv9-3a": {
157			"dotprod",
158		},
159		"armv9-4a": {
160			"dotprod",
161		},
162	},
163	X86: {
164		"alderlake": {
165			"ssse3",
166			"sse4",
167			"sse4_1",
168			"sse4_2",
169			"avx",
170			"avx2",
171			"aes_ni",
172			"popcnt",
173		},
174		"amberlake": {
175			"ssse3",
176			"sse4",
177			"sse4_1",
178			"sse4_2",
179			"avx",
180			"avx2",
181			"aes_ni",
182			"popcnt",
183		},
184		"atom": {
185			"ssse3",
186			"movbe",
187		},
188		"broadwell": {
189			"ssse3",
190			"sse4",
191			"sse4_1",
192			"sse4_2",
193			"avx",
194			"avx2",
195			"aes_ni",
196			"popcnt",
197		},
198		"goldmont": {
199			"ssse3",
200			"sse4",
201			"sse4_1",
202			"sse4_2",
203			"aes_ni",
204			"popcnt",
205			"movbe",
206		},
207		"goldmont-plus": {
208			"ssse3",
209			"sse4",
210			"sse4_1",
211			"sse4_2",
212			"aes_ni",
213			"popcnt",
214			"movbe",
215		},
216		"goldmont-without-sha-xsaves": {
217			"ssse3",
218			"sse4",
219			"sse4_1",
220			"sse4_2",
221			"aes_ni",
222			"popcnt",
223			"movbe",
224		},
225		"haswell": {
226			"ssse3",
227			"sse4",
228			"sse4_1",
229			"sse4_2",
230			"aes_ni",
231			"avx",
232			"popcnt",
233			"movbe",
234		},
235		"icelake": {
236			"ssse3",
237			"sse4",
238			"sse4_1",
239			"sse4_2",
240			"avx",
241			"avx2",
242			"avx512",
243			"aes_ni",
244			"popcnt",
245		},
246		"ivybridge": {
247			"ssse3",
248			"sse4",
249			"sse4_1",
250			"sse4_2",
251			"aes_ni",
252			"avx",
253			"popcnt",
254		},
255		"kabylake": {
256			"ssse3",
257			"sse4",
258			"sse4_1",
259			"sse4_2",
260			"avx",
261			"avx2",
262			"aes_ni",
263			"popcnt",
264		},
265		"sandybridge": {
266			"ssse3",
267			"sse4",
268			"sse4_1",
269			"sse4_2",
270			"popcnt",
271		},
272		"silvermont": {
273			"ssse3",
274			"sse4",
275			"sse4_1",
276			"sse4_2",
277			"aes_ni",
278			"popcnt",
279			"movbe",
280		},
281		"skylake": {
282			"ssse3",
283			"sse4",
284			"sse4_1",
285			"sse4_2",
286			"avx",
287			"avx2",
288			"avx512",
289			"aes_ni",
290			"popcnt",
291		},
292		"stoneyridge": {
293			"ssse3",
294			"sse4",
295			"sse4_1",
296			"sse4_2",
297			"aes_ni",
298			"avx",
299			"avx2",
300			"popcnt",
301			"movbe",
302		},
303		"tigerlake": {
304			"ssse3",
305			"sse4",
306			"sse4_1",
307			"sse4_2",
308			"avx",
309			"avx2",
310			"avx512",
311			"aes_ni",
312			"popcnt",
313		},
314		"tremont": {
315			"ssse3",
316			"sse4",
317			"sse4_1",
318			"sse4_2",
319			"aes_ni",
320			"popcnt",
321			"movbe",
322		},
323		"whiskeylake": {
324			"ssse3",
325			"sse4",
326			"sse4_1",
327			"sse4_2",
328			"avx",
329			"avx2",
330			"avx512",
331			"aes_ni",
332			"popcnt",
333		},
334		"x86_64": {
335			"ssse3",
336			"sse4",
337			"sse4_1",
338			"sse4_2",
339			"popcnt",
340		},
341	},
342	X86_64: {
343		"" /*default */ : {
344			"ssse3",
345			"sse4",
346			"sse4_1",
347			"sse4_2",
348			"popcnt",
349		},
350		"alderlake": {
351			"ssse3",
352			"sse4",
353			"sse4_1",
354			"sse4_2",
355			"avx",
356			"avx2",
357			"aes_ni",
358			"popcnt",
359		},
360		"amberlake": {
361			"ssse3",
362			"sse4",
363			"sse4_1",
364			"sse4_2",
365			"avx",
366			"avx2",
367			"aes_ni",
368			"popcnt",
369		},
370		"broadwell": {
371			"ssse3",
372			"sse4",
373			"sse4_1",
374			"sse4_2",
375			"avx",
376			"avx2",
377			"aes_ni",
378			"popcnt",
379		},
380		"goldmont": {
381			"ssse3",
382			"sse4",
383			"sse4_1",
384			"sse4_2",
385			"aes_ni",
386			"popcnt",
387		},
388		"goldmont-plus": {
389			"ssse3",
390			"sse4",
391			"sse4_1",
392			"sse4_2",
393			"aes_ni",
394			"popcnt",
395		},
396		"goldmont-without-sha-xsaves": {
397			"ssse3",
398			"sse4",
399			"sse4_1",
400			"sse4_2",
401			"aes_ni",
402			"popcnt",
403		},
404		"haswell": {
405			"ssse3",
406			"sse4",
407			"sse4_1",
408			"sse4_2",
409			"aes_ni",
410			"avx",
411			"popcnt",
412		},
413		"icelake": {
414			"ssse3",
415			"sse4",
416			"sse4_1",
417			"sse4_2",
418			"avx",
419			"avx2",
420			"avx512",
421			"aes_ni",
422			"popcnt",
423		},
424		"ivybridge": {
425			"ssse3",
426			"sse4",
427			"sse4_1",
428			"sse4_2",
429			"aes_ni",
430			"avx",
431			"popcnt",
432		},
433		"kabylake": {
434			"ssse3",
435			"sse4",
436			"sse4_1",
437			"sse4_2",
438			"avx",
439			"avx2",
440			"aes_ni",
441			"popcnt",
442		},
443		"sandybridge": {
444			"ssse3",
445			"sse4",
446			"sse4_1",
447			"sse4_2",
448			"popcnt",
449		},
450		"silvermont": {
451			"ssse3",
452			"sse4",
453			"sse4_1",
454			"sse4_2",
455			"aes_ni",
456			"popcnt",
457		},
458		"skylake": {
459			"ssse3",
460			"sse4",
461			"sse4_1",
462			"sse4_2",
463			"avx",
464			"avx2",
465			"avx512",
466			"aes_ni",
467			"popcnt",
468		},
469		"stoneyridge": {
470			"ssse3",
471			"sse4",
472			"sse4_1",
473			"sse4_2",
474			"aes_ni",
475			"avx",
476			"avx2",
477			"popcnt",
478		},
479		"tigerlake": {
480			"ssse3",
481			"sse4",
482			"sse4_1",
483			"sse4_2",
484			"avx",
485			"avx2",
486			"avx512",
487			"aes_ni",
488			"popcnt",
489		},
490		"tremont": {
491			"ssse3",
492			"sse4",
493			"sse4_1",
494			"sse4_2",
495			"aes_ni",
496			"popcnt",
497		},
498		"whiskeylake": {
499			"ssse3",
500			"sse4",
501			"sse4_1",
502			"sse4_2",
503			"avx",
504			"avx2",
505			"avx512",
506			"aes_ni",
507			"popcnt",
508		},
509	},
510}
511