# The multilib settings of Andes NDS32 cpu for GNU compiler
# Copyright (C) 2012-2021 Free Software Foundation, Inc.
# Contributed by Andes Technology Corporation.
#
# 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/>.

# We also define a macro MULTILIB_DEFAULTS in nds32.h that tells the
# driver program which options are defaults for this target and thus
# do not need to be handled specially.
MULTILIB_OPTIONS += mcmodel=small/mcmodel=medium/mcmodel=large mvh

ifneq ($(filter graywolf,$(TM_MULTILIB_CONFIG)),)
MULTILIB_OPTIONS += mcpu=graywolf
endif

ifneq ($(filter dsp,$(TM_MULTILIB_CONFIG)),)
MULTILIB_OPTIONS += mext-dsp
endif

ifneq ($(filter zol,$(TM_MULTILIB_CONFIG)),)
MULTILIB_OPTIONS += mext-zol
endif

ifneq ($(filter v3m+,$(TM_MULTILIB_CONFIG)),)
MULTILIB_OPTIONS += march=v3m+
endif

# ------------------------------------------------------------------------
