blob: f4409a91898379b97485b8773f6a6bd85039d4e8 [file] [log] [blame]
// Copyright 2020 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package android
var archVariants = map[ArchType][]string{
Arm: {
"armv7-a",
"armv7-a-neon",
"armv8-a",
"armv8-2a",
},
Arm64: {
"armv8-a",
"armv8-a-branchprot",
"armv8-2a",
"armv8-2a-dotprod",
"armv9-a",
},
X86: {
"amberlake",
"atom",
"broadwell",
"goldmont",
"goldmont-plus",
// Target arch is goldmont, but without supporting SHA and XSAVES.
// This ensures efficient execution on a broad range of Intel/AMD CPUs used
// in Chromebooks, including those lacking SHA or XSAVES support.
// (e.g. Kaby Lake, Gemini Lake, Alder Lake and AMD Zen series)
"goldmont-without-sha-xsaves",
"haswell",
"icelake",
"ivybridge",
"kabylake",
"sandybridge",
"silvermont",
"skylake",
"stoneyridge",
"tigerlake",
"tremont",
"whiskeylake",
"x86_64",
},
X86_64: {
"amberlake",
"broadwell",
"goldmont",
"goldmont-plus",
"goldmont-without-sha-xsaves",
"haswell",
"icelake",
"ivybridge",
"kabylake",
"sandybridge",
"silvermont",
"skylake",
"stoneyridge",
"tigerlake",
"tremont",
"whiskeylake",
},
}
var cpuVariants = map[ArchType][]string{
Arm: {
"cortex-a7",
"cortex-a8",
"cortex-a9",
"cortex-a15",
"cortex-a32",
"cortex-a53",
"cortex-a53.a57",
"cortex-a55",
"cortex-a72",
"cortex-a73",
"cortex-a75",
"cortex-a76",
"krait",
"kryo",
"kryo385",
"exynos-m1",
"exynos-m2",
},
Arm64: {
"cortex-a53",
"cortex-a55",
"cortex-a72",
"cortex-a73",
"cortex-a75",
"cortex-a76",
"kryo",
"kryo385",
"exynos-m1",
"exynos-m2",
},
X86: {},
X86_64: {},
}
var archFeatures = map[ArchType][]string{
Arm: {
"neon",
},
Arm64: {
"dotprod",
},
X86: {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"avx2",
"avx512",
"popcnt",
"movbe",
},
X86_64: {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"avx2",
"avx512",
"popcnt",
},
}
var androidArchFeatureMap = map[ArchType]map[string][]string{
Arm: {
"armv7-a-neon": {
"neon",
},
"armv8-a": {
"neon",
},
"armv8-2a": {
"neon",
},
},
Arm64: {
"armv8-2a-dotprod": {
"dotprod",
},
"armv9-a": {
"dotprod",
},
},
X86: {
"amberlake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"atom": {
"ssse3",
"movbe",
},
"broadwell": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"goldmont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
"movbe",
},
"goldmont-plus": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
"movbe",
},
"goldmont-without-sha-xsaves": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
"movbe",
},
"haswell": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"popcnt",
"movbe",
},
"icelake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"ivybridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"popcnt",
},
"kabylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"sandybridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"popcnt",
},
"silvermont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
"movbe",
},
"skylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"stoneyridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"avx2",
"popcnt",
"movbe",
},
"tigerlake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"tremont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
"movbe",
},
"whiskeylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"x86_64": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"popcnt",
},
},
X86_64: {
"" /*default */ : {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"popcnt",
},
"amberlake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"broadwell": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"goldmont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
},
"goldmont-plus": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
},
"goldmont-without-sha-xsaves": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
},
"haswell": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"popcnt",
},
"icelake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"ivybridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"popcnt",
},
"kabylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"aes_ni",
"popcnt",
},
"sandybridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"popcnt",
},
"silvermont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
},
"skylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"stoneyridge": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"avx",
"avx2",
"popcnt",
},
"tigerlake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
"tremont": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"aes_ni",
"popcnt",
},
"whiskeylake": {
"ssse3",
"sse4",
"sse4_1",
"sse4_2",
"avx",
"avx2",
"avx512",
"aes_ni",
"popcnt",
},
},
}