xref: /netbsd-src/external/gpl3/binutils.old/dist/gprofng/common/hwc_cpus.h (revision c42dbd0ed2e61fe6eda8590caa852ccf34719964)
1*c42dbd0eSchristos /* Copyright (C) 2021 Free Software Foundation, Inc.
2*c42dbd0eSchristos    Contributed by Oracle.
3*c42dbd0eSchristos 
4*c42dbd0eSchristos    This file is part of GNU Binutils.
5*c42dbd0eSchristos 
6*c42dbd0eSchristos    This program is free software; you can redistribute it and/or modify
7*c42dbd0eSchristos    it under the terms of the GNU General Public License as published by
8*c42dbd0eSchristos    the Free Software Foundation; either version 3, or (at your option)
9*c42dbd0eSchristos    any later version.
10*c42dbd0eSchristos 
11*c42dbd0eSchristos    This program is distributed in the hope that it will be useful,
12*c42dbd0eSchristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
13*c42dbd0eSchristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*c42dbd0eSchristos    GNU General Public License for more details.
15*c42dbd0eSchristos 
16*c42dbd0eSchristos    You should have received a copy of the GNU General Public License
17*c42dbd0eSchristos    along with this program; if not, write to the Free Software
18*c42dbd0eSchristos    Foundation, 51 Franklin Street - Fifth Floor, Boston,
19*c42dbd0eSchristos    MA 02110-1301, USA.  */
20*c42dbd0eSchristos 
21*c42dbd0eSchristos /* Hardware counter profiling: cpu types */
22*c42dbd0eSchristos 
23*c42dbd0eSchristos #ifndef __HWC_CPUS_H
24*c42dbd0eSchristos #define __HWC_CPUS_H
25*c42dbd0eSchristos 
26*c42dbd0eSchristos #define MAX_PICS    20 /* Max # of HW ctrs that can be enabled simultaneously */
27*c42dbd0eSchristos 
28*c42dbd0eSchristos   /* type for specifying CPU register number */
29*c42dbd0eSchristos   typedef int regno_t;
30*c42dbd0eSchristos #define REGNO_ANY       ((regno_t)-1)
31*c42dbd0eSchristos #define REGNO_INVALID   ((regno_t)-2)
32*c42dbd0eSchristos 
33*c42dbd0eSchristos   /* --- Utilities for use with regno_t and reg_list[] --- */
34*c42dbd0eSchristos #define REG_LIST_IS_EMPTY(reg_list) (!(reg_list) || (reg_list)[0] == REGNO_ANY)
35*c42dbd0eSchristos #define REG_LIST_EOL(regno)         ((regno)==REGNO_ANY)
36*c42dbd0eSchristos #define REG_LIST_SINGLE_VALID_ENTRY(reg_list) \
37*c42dbd0eSchristos   (((reg_list) && (reg_list)[1] == REGNO_ANY && \
38*c42dbd0eSchristos       (reg_list)[0] != REGNO_ANY ) ? (reg_list)[0] : REGNO_ANY)
39*c42dbd0eSchristos 
40*c42dbd0eSchristos   /* enum for specifying unknown or uninitialized CPU */
41*c42dbd0eSchristos   enum
42*c42dbd0eSchristos   {
43*c42dbd0eSchristos     CPUVER_GENERIC = 0,
44*c42dbd0eSchristos     CPUVER_UNDEFINED = -1
45*c42dbd0eSchristos   };
46*c42dbd0eSchristos 
47*c42dbd0eSchristos   // Note: changing an values below may make older HWC experiments unreadable.
48*c42dbd0eSchristos   // --- Sun/Oracle SPARC ---
49*c42dbd0eSchristos #define CPC_ULTRA1              1000
50*c42dbd0eSchristos #define CPC_ULTRA2              1001
51*c42dbd0eSchristos #define CPC_ULTRA3              1002
52*c42dbd0eSchristos #define CPC_ULTRA3_PLUS         1003
53*c42dbd0eSchristos #define CPC_ULTRA3_I            1004
54*c42dbd0eSchristos #define CPC_ULTRA4_PLUS         1005 /* Panther */
55*c42dbd0eSchristos #define CPC_ULTRA4              1017 /* Jaguar */
56*c42dbd0eSchristos #define CPC_ULTRA_T1            1100 /* Niagara1 */
57*c42dbd0eSchristos #define CPC_ULTRA_T2            1101 /* Niagara2 */
58*c42dbd0eSchristos #define CPC_ULTRA_T2P           1102
59*c42dbd0eSchristos #define CPC_ULTRA_T3            1103
60*c42dbd0eSchristos #define CPC_SPARC_T4            1104
61*c42dbd0eSchristos #define CPC_SPARC_T5            1110
62*c42dbd0eSchristos #define CPC_SPARC_T6            1120
63*c42dbd0eSchristos // #define CPC_SPARC_T7         1130 // use CPC_SPARC_M7
64*c42dbd0eSchristos #define CPC_SPARC_M4            1204 /* Obsolete */
65*c42dbd0eSchristos #define CPC_SPARC_M5            1210
66*c42dbd0eSchristos #define CPC_SPARC_M6            1220
67*c42dbd0eSchristos #define CPC_SPARC_M7            1230
68*c42dbd0eSchristos #define CPC_SPARC_M8            1240
69*c42dbd0eSchristos 
70*c42dbd0eSchristos   // --- Intel ---
71*c42dbd0eSchristos   // Pentium
72*c42dbd0eSchristos #define CPC_PENTIUM             2000
73*c42dbd0eSchristos #define CPC_PENTIUM_MMX         2001
74*c42dbd0eSchristos #define CPC_PENTIUM_PRO         2002
75*c42dbd0eSchristos #define CPC_PENTIUM_PRO_MMX     2003
76*c42dbd0eSchristos #define CPC_PENTIUM_4           2017
77*c42dbd0eSchristos #define CPC_PENTIUM_4_HT        2027
78*c42dbd0eSchristos 
79*c42dbd0eSchristos   // Core Microarchitecture (Merom/Menryn)
80*c42dbd0eSchristos #define CPC_INTEL_CORE2         2028
81*c42dbd0eSchristos #define CPC_INTEL_NEHALEM       2040
82*c42dbd0eSchristos #define CPC_INTEL_WESTMERE      2042
83*c42dbd0eSchristos #define CPC_INTEL_SANDYBRIDGE   2045
84*c42dbd0eSchristos #define CPC_INTEL_IVYBRIDGE     2047
85*c42dbd0eSchristos #define CPC_INTEL_ATOM          2050 /* Atom*/
86*c42dbd0eSchristos #define CPC_INTEL_HASWELL       2060
87*c42dbd0eSchristos #define CPC_INTEL_BROADWELL     2070
88*c42dbd0eSchristos #define CPC_INTEL_SKYLAKE       2080
89*c42dbd0eSchristos #define CPC_INTEL_UNKNOWN       2499
90*c42dbd0eSchristos #define CPC_AMD_K8C             2500 /* Opteron, Athlon... */
91*c42dbd0eSchristos #define CPC_AMD_FAM_10H         2501 /* Barcelona, Shanghai... */
92*c42dbd0eSchristos #define CPC_AMD_FAM_11H         2502 /* Griffin... */
93*c42dbd0eSchristos #define CPC_AMD_FAM_15H         2503
94*c42dbd0eSchristos #define CPC_KPROF               3003 // OBSOLETE (To support 12.3 and earlier)
95*c42dbd0eSchristos #define CPC_FOX                 3004 /* pseudo-chip */
96*c42dbd0eSchristos 
97*c42dbd0eSchristos   // --- Fujitsu ---
98*c42dbd0eSchristos #define CPC_SPARC64_III     3000
99*c42dbd0eSchristos #define CPC_SPARC64_V       3002
100*c42dbd0eSchristos #define CPC_SPARC64_VI      4003 /* OPL-C */
101*c42dbd0eSchristos #define CPC_SPARC64_VII     4004 /* Jupiter */
102*c42dbd0eSchristos #define CPC_SPARC64_X       4006 /* Athena */
103*c42dbd0eSchristos #define CPC_SPARC64_XII     4010 /* Athena++ */
104*c42dbd0eSchristos 
105*c42dbd0eSchristos // aarch64. Constants from arch/arm64/include/asm/cputype.h
106*c42dbd0eSchristos enum {
107*c42dbd0eSchristos     ARM_CPU_IMP_ARM     = 0x41,
108*c42dbd0eSchristos     ARM_CPU_IMP_BRCM    = 0x42,
109*c42dbd0eSchristos     ARM_CPU_IMP_CAVIUM  = 0x43,
110*c42dbd0eSchristos     ARM_CPU_IMP_APM     = 0x50,
111*c42dbd0eSchristos     ARM_CPU_IMP_QCOM    = 0x51
112*c42dbd0eSchristos };
113*c42dbd0eSchristos 
114*c42dbd0eSchristos #define	AARCH64_VENDORSTR_ARM	"ARM"
115*c42dbd0eSchristos 
116*c42dbd0eSchristos   /* strings below must match those returned by cpc_getcpuver() */
117*c42dbd0eSchristos   typedef struct
118*c42dbd0eSchristos   {
119*c42dbd0eSchristos     int cpc2_cpuver;
120*c42dbd0eSchristos     const char * cpc2_cciname;
121*c42dbd0eSchristos   } libcpc2_cpu_lookup_t;
122*c42dbd0eSchristos #define LIBCPC2_CPU_LOOKUP_LIST \
123*c42dbd0eSchristos   {CPC_AMD_K8C               , "AMD Opteron & Athlon64"}, \
124*c42dbd0eSchristos   {CPC_AMD_FAM_10H           , "AMD Family 10h"}, \
125*c42dbd0eSchristos   {CPC_AMD_FAM_11H           , "AMD Family 11h"}, \
126*c42dbd0eSchristos   {CPC_AMD_FAM_15H           , "AMD Family 15h Model 01h"}, \
127*c42dbd0eSchristos   {CPC_AMD_FAM_15H           , "AMD Family 15h Model 02h"},/*future*/ \
128*c42dbd0eSchristos   {CPC_AMD_FAM_15H           , "AMD Family 15h Model 03h"},/*future*/ \
129*c42dbd0eSchristos   {CPC_PENTIUM_4_HT          , "Pentium 4 with HyperThreading"}, \
130*c42dbd0eSchristos   {CPC_PENTIUM_4             , "Pentium 4"}, \
131*c42dbd0eSchristos   {CPC_PENTIUM_PRO_MMX       , "Pentium Pro with MMX, Pentium II"}, \
132*c42dbd0eSchristos   {CPC_PENTIUM_PRO           , "Pentium Pro, Pentium II"}, \
133*c42dbd0eSchristos   {CPC_PENTIUM_MMX           , "Pentium with MMX"}, \
134*c42dbd0eSchristos   {CPC_PENTIUM               , "Pentium"}, \
135*c42dbd0eSchristos   {CPC_INTEL_CORE2           , "Core Microarchitecture"}, \
136*c42dbd0eSchristos     /* Merom:  F6M15: Clovertown, Kentsfield, Conroe, Merom, Woodcrest */ \
137*c42dbd0eSchristos     /* Merom:  F6M22: Merom Conroe */ \
138*c42dbd0eSchristos     /* Penryn: F6M23: Yorkfield, Wolfdale, Penryn, Harpertown */ \
139*c42dbd0eSchristos     /* Penryn: F6M29: Dunnington */ \
140*c42dbd0eSchristos   {CPC_INTEL_NEHALEM         , "Intel Arch PerfMon v3 on Family 6 Model 26"},/*Bloomfield, Nehalem EP*/ \
141*c42dbd0eSchristos   {CPC_INTEL_NEHALEM         , "Intel Arch PerfMon v3 on Family 6 Model 30"},/*Clarksfield, Lynnfield, Jasper Forest*/ \
142*c42dbd0eSchristos   {CPC_INTEL_NEHALEM         , "Intel Arch PerfMon v3 on Family 6 Model 31"},/*(TBD)*/ \
143*c42dbd0eSchristos   {CPC_INTEL_NEHALEM         , "Intel Arch PerfMon v3 on Family 6 Model 46"},/*Nehalem EX*/ \
144*c42dbd0eSchristos   {CPC_INTEL_WESTMERE        , "Intel Arch PerfMon v3 on Family 6 Model 37"},/*Arrandale, Clarskdale*/ \
145*c42dbd0eSchristos   {CPC_INTEL_WESTMERE        , "Intel Arch PerfMon v3 on Family 6 Model 44"},/*Gulftown, Westmere EP*/ \
146*c42dbd0eSchristos   {CPC_INTEL_WESTMERE        , "Intel Arch PerfMon v3 on Family 6 Model 47"},/*Westmere EX*/ \
147*c42dbd0eSchristos   {CPC_INTEL_SANDYBRIDGE     , "Intel Arch PerfMon v3 on Family 6 Model 42"},/*Sandy Bridge*/ \
148*c42dbd0eSchristos   {CPC_INTEL_SANDYBRIDGE     , "Intel Arch PerfMon v3 on Family 6 Model 45"},/*Sandy Bridge E, SandyBridge-EN, SandyBridge EP*/ \
149*c42dbd0eSchristos   {CPC_INTEL_IVYBRIDGE       , "Intel Arch PerfMon v3 on Family 6 Model 58"},/*Ivy Bridge*/ \
150*c42dbd0eSchristos   {CPC_INTEL_IVYBRIDGE       , "Intel Arch PerfMon v3 on Family 6 Model 62"},/*(TBD)*/ \
151*c42dbd0eSchristos   {CPC_INTEL_ATOM            , "Intel Arch PerfMon v3 on Family 6 Model 28"},/*Atom*/ \
152*c42dbd0eSchristos   {CPC_INTEL_HASWELL         , "Intel Arch PerfMon v3 on Family 6 Model 60"},/*Haswell*/ \
153*c42dbd0eSchristos   {CPC_INTEL_HASWELL         , "Intel Arch PerfMon v3 on Family 6 Model 63"},/*Haswell*/ \
154*c42dbd0eSchristos   {CPC_INTEL_HASWELL         , "Intel Arch PerfMon v3 on Family 6 Model 69"},/*Haswell*/ \
155*c42dbd0eSchristos   {CPC_INTEL_HASWELL         , "Intel Arch PerfMon v3 on Family 6 Model 70"},/*Haswell*/ \
156*c42dbd0eSchristos   {CPC_INTEL_BROADWELL       , "Intel Arch PerfMon v3 on Family 6 Model 61"},/*Broadwell*/ \
157*c42dbd0eSchristos   {CPC_INTEL_BROADWELL       , "Intel Arch PerfMon v3 on Family 6 Model 71"},/*Broadwell*/ \
158*c42dbd0eSchristos   {CPC_INTEL_BROADWELL       , "Intel Arch PerfMon v3 on Family 6 Model 79"},/*Broadwell*/ \
159*c42dbd0eSchristos   {CPC_INTEL_BROADWELL       , "Intel Arch PerfMon v3 on Family 6 Model 86"},/*Broadwell*/ \
160*c42dbd0eSchristos   {CPC_INTEL_SKYLAKE         , "Intel Arch PerfMon v4 on Family 6 Model 78"},/*Skylake*/ \
161*c42dbd0eSchristos   {CPC_INTEL_SKYLAKE         , "Intel Arch PerfMon v4 on Family 6 Model 85"},/*Skylake*/ \
162*c42dbd0eSchristos   {CPC_INTEL_SKYLAKE         , "Intel Arch PerfMon v4 on Family 6 Model 94"},/*Skylake*/ \
163*c42dbd0eSchristos   {CPC_INTEL_UNKNOWN         , "Intel Arch PerfMon"},/*Not yet in table*/ \
164*c42dbd0eSchristos   {CPC_SPARC64_III           , "SPARC64 III"/*?*/}, \
165*c42dbd0eSchristos   {CPC_SPARC64_V             , "SPARC64 V"/*?*/}, \
166*c42dbd0eSchristos   {CPC_SPARC64_VI            , "SPARC64 VI"}, \
167*c42dbd0eSchristos   {CPC_SPARC64_VII           , "SPARC64 VI & VII"}, \
168*c42dbd0eSchristos   {CPC_SPARC64_X             , "SPARC64 X"}, \
169*c42dbd0eSchristos   {CPC_SPARC64_XII           , "SPARC64 XII"}, \
170*c42dbd0eSchristos   {CPC_ULTRA_T1              , "UltraSPARC T1"}, \
171*c42dbd0eSchristos   {CPC_ULTRA_T2              , "UltraSPARC T2"}, \
172*c42dbd0eSchristos   {CPC_ULTRA_T2P             , "UltraSPARC T2+"}, \
173*c42dbd0eSchristos   {CPC_ULTRA_T3              , "SPARC T3"},  \
174*c42dbd0eSchristos   {CPC_SPARC_T4              , "SPARC T4"},  \
175*c42dbd0eSchristos   {CPC_SPARC_M4              , "SPARC M4"},  \
176*c42dbd0eSchristos   {CPC_SPARC_T5              , "SPARC T5"},  \
177*c42dbd0eSchristos   {CPC_SPARC_M5              , "SPARC M5"},  \
178*c42dbd0eSchristos   {CPC_SPARC_T6              , "SPARC T6"},  \
179*c42dbd0eSchristos   {CPC_SPARC_M6              , "SPARC M6"},  \
180*c42dbd0eSchristos   {CPC_SPARC_M7              , "SPARC T7"},  \
181*c42dbd0eSchristos   {CPC_SPARC_M7              , "SPARC 3e40"},  \
182*c42dbd0eSchristos   {CPC_SPARC_M7              , "SPARC M7"},  \
183*c42dbd0eSchristos   {CPC_SPARC_M8              , "SPARC 3e50"},  \
184*c42dbd0eSchristos   {CPC_ULTRA4_PLUS           , "UltraSPARC IV+"}, \
185*c42dbd0eSchristos   {CPC_ULTRA4                , "UltraSPARC IV"}, \
186*c42dbd0eSchristos   {CPC_ULTRA3_I              , "UltraSPARC IIIi"}, \
187*c42dbd0eSchristos   {CPC_ULTRA3_I              , "UltraSPARC IIIi & IIIi+"}, \
188*c42dbd0eSchristos   {CPC_ULTRA3_PLUS           , "UltraSPARC III+"}, \
189*c42dbd0eSchristos   {CPC_ULTRA3_PLUS           , "UltraSPARC III+ & IV"}, \
190*c42dbd0eSchristos   {CPC_ULTRA3                , "UltraSPARC III"}, \
191*c42dbd0eSchristos   {CPC_ULTRA2                , "UltraSPARC I&II"}, \
192*c42dbd0eSchristos   {CPC_ULTRA1                , "UltraSPARC I&II"}, \
193*c42dbd0eSchristos   {ARM_CPU_IMP_APM           , AARCH64_VENDORSTR_ARM}, \
194*c42dbd0eSchristos   {0, NULL}
195*c42dbd0eSchristos   /* init like this:
196*c42dbd0eSchristos      static libcpc2_cpu_lookup_t cpu_table[]={LIBCPC2_CPU_LOOKUP_LIST};
197*c42dbd0eSchristos    */
198*c42dbd0eSchristos #endif
199