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