; Options for the NVPTX port
; Copyright (C) 2014-2021 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC is free software; you can redistribute it and/or modify it under
; the terms of the GNU General Public License as published by the Free
; Software Foundation; either version 3, or (at your option) any later
; version.
;
; GCC is distributed in the hope that it will be useful, but WITHOUT ANY
; WARRANTY; without even the implied warranty of MERCHANTABILITY or
; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
; for more details.
;
; You should have received a copy of the GNU General Public License
; along with GCC; see the file COPYING3.  If not see
; <http://www.gnu.org/licenses/>.

; It's not clear whether this was ever build/tested/used, so this is no longer
; exposed to the user.
;m32
;Target RejectNegative InverseMask(ABI64)
;Generate code for a 32-bit ABI.

m64
Target RejectNegative Mask(ABI64)
Generate code for a 64-bit ABI.

mmainkernel
Target RejectNegative
Link in code for a __main kernel.

moptimize
Target Var(nvptx_optimize) Init(-1)
Optimize partition neutering.

msoft-stack
Target Mask(SOFT_STACK)
Use custom stacks instead of local memory for automatic storage.

msoft-stack-reserve-local=
Target Joined RejectNegative UInteger Var(nvptx_softstack_size) Init(128)
Specify size of .local memory used for stack when the exact amount is not known.

muniform-simt
Target Mask(UNIFORM_SIMT)
Generate code that can keep local state uniform across all lanes.

mgomp
Target Mask(GOMP)
Generate code for OpenMP offloading: enables -msoft-stack and -muniform-simt.

Enum
Name(ptx_isa) Type(int)
Known PTX ISA versions (for use with the -misa= option):

EnumValue
Enum(ptx_isa) String(sm_30) Value(PTX_ISA_SM30)

EnumValue
Enum(ptx_isa) String(sm_35) Value(PTX_ISA_SM35)

; Default needs to be in sync with default in ASM_SPEC in nvptx.h.
misa=
Target RejectNegative ToLower Joined Enum(ptx_isa) Var(ptx_isa_option) Init(PTX_ISA_SM35)
Specify the version of the ptx ISA to use.

Enum
Name(ptx_version) Type(int)
Known PTX versions (for use with the -mptx= option):

EnumValue
Enum(ptx_version) String(3.1) Value(PTX_VERSION_3_1)

EnumValue
Enum(ptx_version) String(6.3) Value(PTX_VERSION_6_3)

mptx=
Target RejectNegative ToLower Joined Enum(ptx_version) Var(ptx_version_option) Init(PTX_VERSION_3_1)
Specify the version of the ptx version to use.
