; Options for the Matsushita MN10300 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/>.

HeaderInclude
config/mn10300/mn10300-opts.h

; The selected processor.
Variable
enum processor_type mn10300_processor = PROCESSOR_DEFAULT

mam33
Target
Target the AM33 processor.

mam33-2
Target
Target the AM33/2.0 processor.

mam34
Target
Target the AM34 processor.

mtune=
Target RejectNegative Joined Var(mn10300_tune_string)
Tune code for the given processor.

mmult-bug
Target Mask(MULT_BUG)
Work around hardware multiply bug.

; Ignored by the compiler
mno-crt0
Target RejectNegative

; Ignored by the compiler
mrelax
Target RejectNegative
Enable linker relaxations.

mreturn-pointer-on-d0
Target Mask(PTR_A0D0)
Return pointers in both a0 and d0.

mliw
Target Mask(ALLOW_LIW)
Allow gcc to generate LIW instructions.

msetlb
Target Mask(ALLOW_SETLB)
Allow gcc to generate the SETLB and Lcc instructions.
