; Options for the PDP11 port of the compiler.

; Copyright (C) 2005-2016 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 Report Mask(40)
Generate code for an 11/40.

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

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

mbcopy
Target RejectNegative Report Mask(BCOPY)
Do not use inline patterns for copying memory.

mbcopy-builtin
Target RejectNegative Report InverseMask(BCOPY, BCOPY_BUILTIN)
Use inline patterns for copying memory.

mbranch-cheap
Target RejectNegative Report InverseMask(BRANCH_EXPENSIVE, BRANCH_CHEAP)
Do not pretend that branches are expensive.

mbranch-expensive
Target RejectNegative Report Mask(BRANCH_EXPENSIVE)
Pretend that branches are expensive.

mdec-asm
Target RejectNegative Report InverseMask(UNIX_ASM)
Use the DEC assembler syntax.

mfloat32
Target Report Mask(FLOAT32)
Use 32 bit float.

mfloat64
Target Report InverseMask(FLOAT32, FLOAT64)
Use 64 bit float.

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

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

mint32
Target Report Mask(INT32)
Use 32 bit int.

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

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

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