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