; Options for the PDP11 port of the compiler.

; Copyright (C) 2005-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/>.

m10
Target RejectNegative
Generate code for an 11/10.

m40
Target Mask(40)
Generate code for an 11/40.

m45
Target Mask(45)
Generate code for an 11/45.

mac0
Target Mask(AC0)
Return floating-point results in ac0 (fr0 in Unix assembler syntax).

mdec-asm
Target RejectNegative Mask(DEC_ASM) Negative(mgnu-asm)
Use the DEC assembler syntax.

mgnu-asm
Target RejectNegative Mask(GNU_ASM) Negative(munix-asm)
Use the GNU assembler syntax.

mfpu
Target RejectNegative Mask(FPU)
Use hardware floating point.

mint16
Target InverseMask(INT32, INT16)
Use 16 bit int.

mint32
Target Mask(INT32)
Use 32 bit int.

msoft-float
Target RejectNegative InverseMask(FPU, SOFT_FLOAT)
Do not use hardware floating point.

msplit
Target Mask(SPLIT)
Target has split I&D.

munix-asm
Target RejectNegative Mask(UNIX_ASM) Negative(mdec-asm)
Use UNIX assembler syntax.

mlra
Target Mask(LRA)
Use LRA register allocator.
