1 /* Definitions of types that are used to store ARC architecture and 2 device information. 3 Copyright (C) 2016-2019 Free Software Foundation, Inc. 4 Contributed by Claudiu Zissulescu (claziss@synopsys.com) 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3, or (at your option) 11 any later version. 12 13 GCC is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING3. If not see 20 <http://www.gnu.org/licenses/>. */ 21 22 #ifndef GCC_ARC_ARCH_H 23 #define GCC_ARC_ARCH_H 24 25 #ifndef IN_LIBGCC2 26 /* Architecture selection types. */ 27 28 enum cpu_flags 29 { 30 #define ARC_OPT(NAME, CODE, MASK, DOC) NAME = CODE, 31 #define ARC_OPTX(NAME, CODE, VAR, VAL, DOC0, DOC1) NAME = CODE, 32 #include "arc-options.def" 33 #undef ARC_OPT 34 #undef ARC_OPTX 35 FL_END 36 }; 37 38 39 /* ARC architecture variants. */ 40 41 enum base_architecture 42 { 43 BASE_ARCH_NONE, 44 #define ARC_ARCH(NAME, ARCH, FLAGS, DFLAGS) BASE_ARCH_##ARCH, 45 #include "arc-arches.def" 46 #undef ARC_ARCH 47 BASE_ARCH_END 48 }; 49 50 /* Architecture specific propoerties. */ 51 52 typedef struct 53 { 54 /* Architecture name. */ 55 const char *const name; 56 57 /* Architecture class. */ 58 enum base_architecture arch_id; 59 60 /* All allowed flags for this architecture. */ 61 const unsigned long long flags; 62 63 /* Default flags for this architecture. It is a subset of 64 FLAGS. */ 65 const unsigned long long dflags; 66 } arc_arch_t; 67 68 /* Tune variants. Needs to match the attr_tune enum. */ 69 70 enum arc_tune_attr 71 { 72 ARC_TUNE_NONE, 73 ARC_TUNE_ARC600, 74 ARC_TUNE_ARC7XX, 75 ARC_TUNE_ARC700_4_2_STD, 76 ARC_TUNE_ARC700_4_2_XMAC, 77 ARC_TUNE_CORE_3, 78 ARC_TUNE_ARCHS4X, 79 ARC_TUNE_ARCHS4XD, 80 ARC_TUNE_ARCHS4XD_SLOW 81 }; 82 83 /* Extra options for a processor template to hold any CPU specific 84 information which is not cover in arc-arches.def. Such example is 85 the width of LP_COUNT register, or the number of register 86 banks. */ 87 88 enum arc_extras 89 { 90 HAS_NONE, 91 HAS_LPCOUNT_16 92 }; 93 94 /* CPU specific properties. */ 95 96 typedef struct 97 { 98 /* CPU name. */ 99 const char *const name; 100 101 /* Architecture class. */ 102 const arc_arch_t *arch_info; 103 104 /* Specific processor type. */ 105 enum processor_type processor; 106 107 /* Specific flags. */ 108 const unsigned long long flags; 109 110 /* Extra value. */ 111 enum arc_extras extra; 112 113 /* Tune value. */ 114 enum arc_tune_attr tune; 115 116 } arc_cpu_t; 117 118 const arc_arch_t arc_arch_types[] = 119 { 120 {"none", BASE_ARCH_NONE, 0, 0}, 121 #define ARC_ARCH(NAME, ARCH, FLAGS, DFLAGS) \ 122 {NAME, BASE_ARCH_##ARCH, FLAGS, DFLAGS}, 123 #include "arc-arches.def" 124 #undef ARC_ARCH 125 {NULL, BASE_ARCH_END, 0, 0} 126 }; 127 128 const arc_cpu_t arc_cpu_types[] = 129 { 130 {"none", NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE}, 131 #define ARC_CPU(NAME, ARCH, FLAGS, EXTRA, TUNE) \ 132 {#NAME, &arc_arch_types [BASE_ARCH_##ARCH], PROCESSOR_##NAME, FLAGS, HAS_##EXTRA, ARC_TUNE_##TUNE }, 133 #include "arc-cpus.def" 134 #undef ARC_CPU 135 {NULL, NULL, PROCESSOR_NONE, 0, HAS_NONE, ARC_TUNE_NONE} 136 }; 137 138 /* Currently selected cpu type. */ 139 extern const arc_cpu_t *arc_selected_cpu; 140 141 #endif 142 #endif /* GCC_ARC_ARCH_H */ 143