// 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", "oryon", }, 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", }, }, }