/* m68k microarchitecture names.
   Copyright (C) 1987-2022 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/>.  */

/* Define microarchitectures for the -mtune option, used both in
   m68k.cc and to generate m68k-tables.opt.  Before including this
   file, define a macro:

   M68K_MICROARCH (NAME, DEVICE, MICROARCH, ISA, FLAGS)

   where NAME is the name for use with -mtune=, DEVICE is the value in
   the target_device enumeration of a representative device, FLAGS is
   the set of FL_* flags that apply to this ISA and the other
   arguments are as for M68K_DEVICE in m68k-devices.def.  */

M68K_MICROARCH ("68000",    m68000,  68000,    isa_00,  FL_FOR_isa_00)
M68K_MICROARCH ("68010",    m68010,  68010,    isa_10,  FL_FOR_isa_10)
M68K_MICROARCH ("68020",    m68020,  68020,    isa_20,  FL_FOR_isa_20)
M68K_MICROARCH ("68020-40", m68020,  68020_40, isa_20,  FL_FOR_isa_20)
M68K_MICROARCH ("68020-60", m68020,  68020_60, isa_20,  FL_FOR_isa_20)
M68K_MICROARCH ("68030",    m68030,  68030,    isa_20,  FL_FOR_isa_20)
M68K_MICROARCH ("68040",    m68040,  68040,    isa_40,  FL_FOR_isa_40)
M68K_MICROARCH ("68060",    m68060,  68060,    isa_40,  FL_FOR_isa_40)
M68K_MICROARCH ("cpu32",    cpu32,   cpu32,    isa_20,  FL_FOR_isa_cpu32)
M68K_MICROARCH ("cfv1",     mcf51qe, cfv1,     isa_c,   FL_FOR_isa_c)
M68K_MICROARCH ("cfv2",     mcf5206, cfv2,     isa_a,   FL_FOR_isa_a)
M68K_MICROARCH ("cfv3",     mcf5307, cfv3,     isa_a,   FL_FOR_isa_a | FL_CF_HWDIV)
M68K_MICROARCH ("cfv4",     mcf5407, cfv4,     isa_b,   FL_FOR_isa_b)
M68K_MICROARCH ("cfv4e",    mcf547x, cfv4e,    isa_b,   FL_FOR_isa_b | FL_CF_USP| FL_CF_EMAC | FL_CF_FPU)
