; Options for the ARM port of the compiler.

; Copyright (C) 2005 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 2, 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 COPYING.  If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.

mabi=
Target RejectNegative Joined Var(target_abi_name)
Specify an ABI

mabort-on-noreturn
Target Report Mask(ABORT_NORETURN)
Generate a call to abort if a noreturn function returns

mapcs
Target RejectNegative Mask(APCS_FRAME) MaskExists Undocumented

mapcs-float
Target Report Mask(APCS_FLOAT)
Pass FP arguments in FP registers

mapcs-frame
Target Report Mask(APCS_FRAME)
Generate APCS conformant stack frames

mapcs-reentrant
Target Report Mask(APCS_REENT)
Generate re-entrant, PIC code

mapcs-stack-check
Target Report Mask(APCS_STACK) Undocumented

march=
Target RejectNegative Joined
Specify the name of the target architecture

; APPLE LOCAL begin 6150882 use thumb2 by default for v7
marm
Target RejectNegative VarExists Var(thumb_option, 0) Undocumented
; APPLE LOCAL end 6150882 use thumb2 by default for v7

mbig-endian
Target Report RejectNegative Mask(BIG_END)
Assume target CPU is configured as big endian

mcallee-super-interworking
Target Report Mask(CALLEE_INTERWORKING)
Thumb: Assume non-static functions may be called from ARM code

mcaller-super-interworking
Target Report Mask(CALLER_INTERWORKING)
Thumb: Assume function pointers may go to non-Thumb aware code

mcirrus-fix-invalid-insns
Target Report Mask(CIRRUS_FIX_INVALID_INSNS)
Cirrus: Place NOPs to avoid invalid instruction combinations

mcpu=
Target RejectNegative Joined
Specify the name of the target CPU

mfloat-abi=
Target RejectNegative Joined Var(target_float_abi_name)
Specify if floating point hardware should be used

mfp=
Target RejectNegative Joined Undocumented Var(target_fpe_name)

;; Now ignored.
mfpe
Target RejectNegative Mask(FPE) Undocumented

mfpe=
Target RejectNegative Joined Undocumented Var(target_fpe_name)

mfpu=
Target RejectNegative Joined Var(target_fpu_name)
Specify the name of the target floating point hardware/format

mhard-float
Target RejectNegative
Alias for -mfloat-abi=hard

mlittle-endian
Target Report RejectNegative InverseMask(BIG_END)
Assume target CPU is configured as little endian

; APPLE LOCAL begin mlong-branch for arm
mlong-branch
Target Mask(LONG_CALLS)
Alias for -mlong-calls
; APPLE LOCAL end mlong-branch for arm

; APPLE LOCAL begin mlong-branch for arm
mlong-calls
Target Report Mask(LONG_CALLS) MaskExists
Generate call insns as indirect calls, if necessary
; APPLE LOCAL end mlong-branch for arm

; APPLE LOCAL begin mlong-branch for arm
mlongcall
Target Mask(LONG_CALLS) MaskExists
Alias for -mlong-calls
; APPLE LOCAL end mlong-branch for arm

mpic-register=
Target RejectNegative Joined Var(arm_pic_register_string)
Specify the register to be used for PIC addressing

mpoke-function-name
Target Report Mask(POKE_FUNCTION_NAME)
Store function names in object code

msched-prolog
Target Report Mask(SCHED_PROLOG)
Permit scheduling of a function's prologue sequence

msingle-pic-base
Target Report Mask(SINGLE_PIC_BASE)
Do not load the PIC register in function prologues

msoft-float
Target RejectNegative
Alias for -mfloat-abi=soft

mstructure-size-boundary=
Target RejectNegative Joined Var(structure_size_string)
Specify the minimum bit alignment of structures

; APPLE LOCAL begin 6150882 use thumb2 by default for v7
mthumb
Target Report Var(thumb_option) Init(-1)
Compile for the Thumb not the ARM
; APPLE LOCAL end 6150882 use thumb2 by default for v7

; APPLE LOCAL begin ARM interworking
mthumb-interwork
Target Report Var(interwork_option) Init(-1)
Support calls between Thumb and ARM instruction sets
; APPLE LOCAL end ARM interworking

mtp=
Target RejectNegative Joined Var(target_thread_switch)
Specify how to access the thread pointer

mtpcs-frame
Target Report Mask(TPCS_FRAME)
Thumb: Generate (non-leaf) stack frames even if not needed

mtpcs-leaf-frame
Target Report Mask(TPCS_LEAF_FRAME)
Thumb: Generate (leaf) stack frames even if not needed

mtune=
Target RejectNegative Joined
Tune code for the given processor

mwords-little-endian
Target Report RejectNegative Mask(LITTLE_WORDS)
Assume big endian bytes, little endian words

; APPLE LOCAL begin 5946347 ms_struct support
mms-bitfields
Target Report Mask(MS_BITFIELD_LAYOUT)
Use Microsoft structure layout
; APPLE LOCAL end 5946347 ms_struct support
; APPLE LOCAL begin v7 support. Merge from Codesourcery

mvectorize-with-neon-quad
Target Report Mask(NEON_VECTORIZE_QUAD)
Use Neon quad-word (rather than double-word) registers for vectorization
; APPLE LOCAL end v7 support. Merge from Codesourcery
