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