15f9996aaSopenharmony_ci# Copyright 2014 The Chromium Authors. All rights reserved. 25f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 35f9996aaSopenharmony_ci# found in the LICENSE file. 45f9996aaSopenharmony_ci 55f9996aaSopenharmony_ciimport("//build/config/v8_target_cpu.gni") 65f9996aaSopenharmony_ci 75f9996aaSopenharmony_ci# These are primarily relevant in current_cpu == "arm" contexts, where 85f9996aaSopenharmony_ci# ARM code is being compiled. But they can also be relevant in the 95f9996aaSopenharmony_ci# other contexts when the code will change its behavior based on the 105f9996aaSopenharmony_ci# cpu it wants to generate code for. 115f9996aaSopenharmony_ciif (current_cpu == "arm" || v8_current_cpu == "arm") { 125f9996aaSopenharmony_ci declare_args() { 135f9996aaSopenharmony_ci # Version of the ARM processor when compiling on ARM. Ignored on non-ARM 145f9996aaSopenharmony_ci # platforms. 155f9996aaSopenharmony_ci arm_version = 7 165f9996aaSopenharmony_ci 175f9996aaSopenharmony_ci # The ARM architecture. This will be a string like "armv6" or "armv7-a". 185f9996aaSopenharmony_ci # An empty string means to use the default for the arm_version. 195f9996aaSopenharmony_ci arm_arch = "" 205f9996aaSopenharmony_ci 215f9996aaSopenharmony_ci # The ARM floating point hardware. This will be a string like "neon" or 225f9996aaSopenharmony_ci # "vfpv3". An empty string means to use the default for the arm_version. 235f9996aaSopenharmony_ci arm_fpu = "" 245f9996aaSopenharmony_ci 255f9996aaSopenharmony_ci # The ARM floating point mode. This is either the string "hard", "soft", or 265f9996aaSopenharmony_ci # "softfp". An empty string means to use the default one for the 275f9996aaSopenharmony_ci # arm_version. 285f9996aaSopenharmony_ci arm_float_abi = "" 295f9996aaSopenharmony_ci 305f9996aaSopenharmony_ci # The ARM variant-specific tuning mode. This will be a string like "armv6" 315f9996aaSopenharmony_ci # or "cortex-a15". An empty string means to use the default for the 325f9996aaSopenharmony_ci # arm_version. 335f9996aaSopenharmony_ci arm_tune = "" 345f9996aaSopenharmony_ci 355f9996aaSopenharmony_ci # Whether to use the neon FPU instruction set or not. 365f9996aaSopenharmony_ci arm_use_neon = "" 375f9996aaSopenharmony_ci 385f9996aaSopenharmony_ci # Whether to enable optional NEON code paths. 395f9996aaSopenharmony_ci arm_optionally_use_neon = false 405f9996aaSopenharmony_ci 415f9996aaSopenharmony_ci # Thumb is a reduced instruction set available on some ARM processors that 425f9996aaSopenharmony_ci # has increased code density. 435f9996aaSopenharmony_ci arm_use_thumb = true 445f9996aaSopenharmony_ci } 455f9996aaSopenharmony_ci 465f9996aaSopenharmony_ci assert(arm_float_abi == "" || arm_float_abi == "hard" || 475f9996aaSopenharmony_ci arm_float_abi == "soft" || arm_float_abi == "softfp") 485f9996aaSopenharmony_ci 495f9996aaSopenharmony_ci if (arm_use_neon == "") { 505f9996aaSopenharmony_ci if (current_os == "linux" && target_cpu != v8_target_cpu) { 515f9996aaSopenharmony_ci # Don't use neon on V8 simulator builds as a default. 525f9996aaSopenharmony_ci arm_use_neon = false 535f9996aaSopenharmony_ci } else { 545f9996aaSopenharmony_ci arm_use_neon = true 555f9996aaSopenharmony_ci } 565f9996aaSopenharmony_ci } 575f9996aaSopenharmony_ci 585f9996aaSopenharmony_ci if (arm_version == 6) { 595f9996aaSopenharmony_ci if (arm_arch == "") { 605f9996aaSopenharmony_ci arm_arch = "armv6" 615f9996aaSopenharmony_ci } 625f9996aaSopenharmony_ci if (arm_tune != "") { 635f9996aaSopenharmony_ci arm_tune = "" 645f9996aaSopenharmony_ci } 655f9996aaSopenharmony_ci if (arm_float_abi == "") { 665f9996aaSopenharmony_ci arm_float_abi = "softfp" 675f9996aaSopenharmony_ci } 685f9996aaSopenharmony_ci if (arm_fpu == "") { 695f9996aaSopenharmony_ci arm_fpu = "vfp" 705f9996aaSopenharmony_ci } 715f9996aaSopenharmony_ci arm_use_thumb = false 725f9996aaSopenharmony_ci arm_use_neon = false 735f9996aaSopenharmony_ci } else if (arm_version == 7) { 745f9996aaSopenharmony_ci if (arm_arch == "") { 755f9996aaSopenharmony_ci arm_arch = "armv7-a" 765f9996aaSopenharmony_ci } 775f9996aaSopenharmony_ci if (arm_tune == "") { 785f9996aaSopenharmony_ci arm_tune = "generic-armv7-a" 795f9996aaSopenharmony_ci } 805f9996aaSopenharmony_ci 815f9996aaSopenharmony_ci if (arm_float_abi == "") { 825f9996aaSopenharmony_ci if (current_os == "ohos" || target_os == "ohos" || 835f9996aaSopenharmony_ci target_os == "android") { 845f9996aaSopenharmony_ci arm_float_abi = "softfp" 855f9996aaSopenharmony_ci } else if (current_os == "linux" && target_cpu != v8_target_cpu) { 865f9996aaSopenharmony_ci arm_float_abi = "softfp" 875f9996aaSopenharmony_ci } else { 885f9996aaSopenharmony_ci arm_float_abi = "hard" 895f9996aaSopenharmony_ci } 905f9996aaSopenharmony_ci } 915f9996aaSopenharmony_ci 925f9996aaSopenharmony_ci if (arm_fpu == "") { 935f9996aaSopenharmony_ci if (arm_use_neon) { 945f9996aaSopenharmony_ci arm_fpu = "neon" 955f9996aaSopenharmony_ci } else { 965f9996aaSopenharmony_ci arm_fpu = "vfpv3-d16" 975f9996aaSopenharmony_ci } 985f9996aaSopenharmony_ci } 995f9996aaSopenharmony_ci } else if (arm_version == 8) { 1005f9996aaSopenharmony_ci if (arm_arch == "") { 1015f9996aaSopenharmony_ci arm_arch = "armv8-a" 1025f9996aaSopenharmony_ci } 1035f9996aaSopenharmony_ci if (arm_tune == "") { 1045f9996aaSopenharmony_ci arm_tune = "generic-armv8-a" 1055f9996aaSopenharmony_ci } 1065f9996aaSopenharmony_ci 1075f9996aaSopenharmony_ci if (arm_float_abi == "") { 1085f9996aaSopenharmony_ci if (current_os == "ohos" || target_os == "ohos" || 1095f9996aaSopenharmony_ci target_os == "android") { 1105f9996aaSopenharmony_ci arm_float_abi = "softfp" 1115f9996aaSopenharmony_ci } else { 1125f9996aaSopenharmony_ci arm_float_abi = "hard" 1135f9996aaSopenharmony_ci } 1145f9996aaSopenharmony_ci } 1155f9996aaSopenharmony_ci 1165f9996aaSopenharmony_ci if (arm_fpu == "") { 1175f9996aaSopenharmony_ci if (arm_use_neon) { 1185f9996aaSopenharmony_ci arm_fpu = "neon" 1195f9996aaSopenharmony_ci } else { 1205f9996aaSopenharmony_ci arm_fpu = "vfpv3-d16" 1215f9996aaSopenharmony_ci } 1225f9996aaSopenharmony_ci } 1235f9996aaSopenharmony_ci } 1245f9996aaSopenharmony_ci} else if (current_cpu == "arm64" || v8_current_cpu == "arm64") { 1255f9996aaSopenharmony_ci if (!defined(board_arch)) { 1265f9996aaSopenharmony_ci arm_arch = "armv8-a" 1275f9996aaSopenharmony_ci } else { 1285f9996aaSopenharmony_ci arm_arch = "$board_arch" 1295f9996aaSopenharmony_ci } 1305f9996aaSopenharmony_ci if (!defined(board_cpu)) { 1315f9996aaSopenharmony_ci arm_cpu = "cortex-a55" 1325f9996aaSopenharmony_ci } else { 1335f9996aaSopenharmony_ci arm_cpu = "$board_cpu" 1345f9996aaSopenharmony_ci } 1355f9996aaSopenharmony_ci if (!defined(board_fpu)) { 1365f9996aaSopenharmony_ci arm_fpu = "neon-fp-armv8" 1375f9996aaSopenharmony_ci } else { 1385f9996aaSopenharmony_ci arm_fpu = "$board_fpu" 1395f9996aaSopenharmony_ci } 1405f9996aaSopenharmony_ci 1415f9996aaSopenharmony_ci # arm64 supports only "hard". 1425f9996aaSopenharmony_ci arm_float_abi = "hard" 1435f9996aaSopenharmony_ci arm_use_neon = true 1445f9996aaSopenharmony_ci} 145