15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)if (cpu_arch == "arm") {
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  declare_args() {
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # Version of the ARM processor when compiling on ARM. Ignored on non-ARM
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # platforms.
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_version = 7
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # The ARM floating point mode. This is either the string "hard", "soft", or
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # "softfp". An empty string means to use the default one for the
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # arm_version.
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_float_abi = ""
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # The ARM variant-specific tuning mode. This will be a string like "armv6"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # or "cortex-a15". An empty string means to use the default for the
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # arm_version.
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    arm_tune = ""
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    # Whether to use the neon FPU instruction set or not.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    arm_use_neon = true
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  assert(arm_float_abi == "" ||
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         arm_float_abi == "hard" ||
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         arm_float_abi == "soft" ||
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)         arm_float_abi == "softfp")
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (is_android) {
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_use_neon = false
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  arm_optionally_use_neon = true
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (arm_version == 6) {
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_arch = "armv6"
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (arm_tune != "") {
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      arm_tune = ""
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (arm_float_abi == "") {
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      arm_float_abi = "softfp"
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_fpu = "vfp"
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # Thumb is a reduced instruction set available on some ARM processors that
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    # has increased code density.
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_use_thumb = false
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (arm_version == 7) {
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_arch = "armv7-a"
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (arm_tune == "") {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      arm_tune = "generic-armv7-a"
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (arm_float_abi == "") {
55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      arm_float_abi = "softfp"
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    arm_use_thumb = true
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (arm_use_neon) {
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      arm_fpu = "neon"
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    } else {
63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      arm_fpu = "vfpv3-d16"
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    }
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
67