| /* Definitions of types that are used to store ARC architecture and |
| device information. |
| Copyright (C) 2016-2022 Free Software Foundation, Inc. |
| Contributed by Claudiu Zissulescu (claziss@synopsys.com) |
| |
| 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/>. */ |
| |
| #ifndef GCC_ARC_ARCH_H |
| #define GCC_ARC_ARCH_H |
| |
| #ifndef IN_LIBGCC2 |
| /* Architecture selection types. */ |
| |
| enum cpu_flags |
| { |
| #define ARC_OPT(NAME, CODE, MASK, DOC) NAME = CODE, |
| #define ARC_OPTX(NAME, CODE, VAR, VAL, DOC0, DOC1) NAME = CODE, |
| #include "arc-options.def" |
| #undef ARC_OPT |
| #undef ARC_OPTX |
| FL_END |
| }; |
| |
| |
| /* ARC architecture variants. */ |
| |
| enum base_architecture |
| { |
| BASE_ARCH_NONE, |
| #define ARC_ARCH(NAME, ARCH, FLAGS, DFLAGS) BASE_ARCH_##ARCH, |
| #include "arc-arches.def" |
| #undef ARC_ARCH |
| BASE_ARCH_END |
| }; |
| |
| /* Architecture specific propoerties. */ |
| |
| typedef struct |
| { |
| /* Architecture name. */ |
| const char *const name; |
| |
| /* Architecture class. */ |
| enum base_architecture arch_id; |
| |
| /* All allowed flags for this architecture. */ |
| const unsigned long long flags; |
| |
| /* Default flags for this architecture. It is a subset of |
| FLAGS. */ |
| const unsigned long long dflags; |
| } arc_arch_t; |
| |
| /* Tune variants. Needs to match the attr_tune enum. */ |
| |
| enum arc_tune_attr |
| { |
| ARC_TUNE_NONE, |
| ARC_TUNE_ARC600, |
| ARC_TUNE_ARC7XX, |
| ARC_TUNE_ARC700_4_2_STD, |
| ARC_TUNE_ARC700_4_2_XMAC, |
| ARC_TUNE_CORE_3, |
| ARC_TUNE_ARCHS4X, |
| ARC_TUNE_ARCHS4XD, |
| ARC_TUNE_ARCHS4XD_SLOW, |
| ARC_TUNE_ARCHS4X_REL31A |
| }; |
| |
| /* Extra options for a processor template to hold any CPU specific |
| information which is not cover in arc-arches.def. Such example is |
| the width of LP_COUNT register, or the number of register |
| banks. */ |
| |
| enum arc_extras |
| { |
| HAS_NONE, |
| HAS_LPCOUNT_16 |
| }; |
| |
| /* CPU specific properties. */ |
| |
| typedef struct |
| { |
| /* CPU name. */ |
| const char *const name; |
| |
| /* Architecture class. */ |
| const arc_arch_t *arch_info; |
| |
| /* Specific processor type. */ |
| enum processor_type processor; |
| |
| /* Specific flags. */ |
| const unsigned long long flags; |
| |
| /* Extra value. */ |
| enum arc_extras extra; |
| |
| /* Tune value. */ |
| enum arc_tune_attr tune; |
| |
| } arc_cpu_t; |
| |
| const arc_arch_t arc_arch_types[] = |
| { |
| {"none", BASE_ARCH_NONE, 0, 0}, |
| #define ARC_ARCH(NAME, ARCH, FLAGS, DFLAGS) \ |
| {NAME, BASE_ARCH_##ARCH, FLAGS, DFLAGS}, |
| #include "arc-arches.def" |
| #undef ARC_ARCH |
| {NULL, BASE_ARCH_END, 0, 0} |
| }; |
| |
| const arc_cpu_t arc_cpu_types[] = |
| { |
| {"none", NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE}, |
| #define ARC_CPU(NAME, ARCH, FLAGS, EXTRA, TUNE) \ |
| {#NAME, &arc_arch_types [BASE_ARCH_##ARCH], PROCESSOR_##NAME, FLAGS, HAS_##EXTRA, ARC_TUNE_##TUNE }, |
| #include "arc-cpus.def" |
| #undef ARC_CPU |
| {NULL, NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE} |
| }; |
| |
| /* Currently selected cpu type. */ |
| extern const arc_cpu_t *arc_selected_cpu; |
| |
| #endif |
| #endif /* GCC_ARC_ARCH_H */ |