# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/v8_target_cpu.gni")

# These are primarily relevant in current_cpu == "mips*" contexts, where
# MIPS code is being compiled.  But they can also be relevant in the
# other contexts when the code will change its behavior based on the
# cpu it wants to generate code for.
declare_args() {
  # MIPS MultiMedia Instruction compilation flag.
  mips_use_mmi = false
}

if (current_cpu == "mipsel" || v8_current_cpu == "mipsel" ||
    current_cpu == "mips" || v8_current_cpu == "mips") {
  declare_args() {
    # MIPS arch variant. Possible values are:
    #   "r1"
    #   "r2"
    #   "r6"
    #   "loongson3"
    mips_arch_variant = "r1"

    # MIPS DSP ASE revision. Possible values are:
    #   0: unavailable
    #   1: revision 1
    #   2: revision 2
    mips_dsp_rev = 0

    # MIPS SIMD Arch compilation flag.
    mips_use_msa = false

    # MIPS floating-point ABI. Possible values are:
    #   "hard": sets the GCC -mhard-float option.
    #   "soft": sets the GCC -msoft-float option.
    mips_float_abi = "hard"

    # MIPS32 floating-point register width. Possible values are:
    #   "fp32": sets the GCC -mfp32 option.
    #   "fp64": sets the GCC -mfp64 option.
    #   "fpxx": sets the GCC -mfpxx option.
    mips_fpu_mode = "fp32"
  }
} else if (current_cpu == "mips64el" || v8_current_cpu == "mips64el" ||
           current_cpu == "mips64" || v8_current_cpu == "mips64") {
  # MIPS arch variant. Possible values are:
  #   "r2"
  #   "r6"
  #   "loongson3"
  if (current_os == "android" || target_os == "android") {
    declare_args() {
      mips_arch_variant = "r6"

      # MIPS SIMD Arch compilation flag.
      mips_use_msa = true
    }
  } else {
    declare_args() {
      mips_arch_variant = "r2"

      # MIPS SIMD Arch compilation flag.
      mips_use_msa = false
    }
  }
}
