Vector Optimized Library of Kernels  2.4
Architecture-tuned implementations of math kernels
cpuinfo_ppc.h
Go to the documentation of this file.
1 // Copyright 2018 IBM
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef CPU_FEATURES_INCLUDE_CPUINFO_PPC_H_
16 #define CPU_FEATURES_INCLUDE_CPUINFO_PPC_H_
17 
19 #include "cpu_features_macros.h"
20 #include "internal/hwcaps.h"
21 
23 
24 typedef struct {
25  int ppc32 : 1;
26  int ppc64 : 1;
27  int ppc601 : 1;
28  int altivec : 1;
29  int fpu : 1;
30  int mmu : 1;
31  int mac_4xx : 1;
32  int unifiedcache : 1;
33  int spe : 1;
34  int efpsingle : 1;
35  int efpdouble : 1;
36  int no_tb : 1;
37  int power4 : 1;
38  int power5 : 1;
39  int power5plus : 1;
40  int cell : 1;
41  int booke : 1;
42  int smt : 1;
43  int icachesnoop : 1;
44  int arch205 : 1;
45  int pa6t : 1;
46  int dfp : 1;
47  int power6ext : 1;
48  int arch206 : 1;
49  int vsx : 1;
51  int truele : 1;
52  int ppcle : 1;
53  int arch207 : 1;
54  int htm : 1;
55  int dscr : 1;
56  int ebb : 1;
57  int isel : 1;
58  int tar : 1;
59  int vcrypto : 1;
60  int htm_nosc : 1;
61  int arch300 : 1;
62  int ieee128 : 1;
63  int darn : 1;
64  int scv : 1;
65  int htm_no_suspend : 1;
66 
67  // Make sure to update PPCFeaturesEnum below if you add a field here.
68 } PPCFeatures;
69 
70 typedef struct {
72 } PPCInfo;
73 
74 // This function is guaranteed to be malloc, memset and memcpy free.
75 PPCInfo GetPPCInfo(void);
76 
77 typedef struct {
78  char platform[64]; // 0 terminated string
79  char model[64]; // 0 terminated string
80  char machine[64]; // 0 terminated string
81  char cpu[64]; // 0 terminated string
84 
86 
88 // Introspection functions
89 
90 typedef enum {
91  PPC_32, /* 32 bit mode execution */
92  PPC_64, /* 64 bit mode execution */
93  PPC_601_INSTR, /* Old POWER ISA */
94  PPC_HAS_ALTIVEC, /* SIMD Unit*/
95  PPC_HAS_FPU, /* Floating Point Unit */
96  PPC_HAS_MMU, /* Memory management unit */
98  PPC_UNIFIED_CACHE, /* Unified instruction and data cache */
99  PPC_HAS_SPE, /* Signal processing extention unit */
100  PPC_HAS_EFP_SINGLE, /* SPE single precision fpu */
101  PPC_HAS_EFP_DOUBLE, /* SPE double precision fpu */
102  PPC_NO_TB, /* No timebase */
106  PPC_CELL, /* Cell broadband engine */
107  PPC_BOOKE, /* Embedded ISA */
108  PPC_SMT, /* Simultaneous multi-threading */
110  PPC_ARCH_2_05, /* ISA 2.05 - POWER6 */
111  PPC_PA6T, /* PA Semi 6T core ISA */
112  PPC_HAS_DFP, /* Decimal floating point unit */
114  PPC_ARCH_2_06, /* ISA 2.06 - POWER7 */
115  PPC_HAS_VSX, /* Vector-scalar extension */
116  PPC_PSERIES_PERFMON_COMPAT, /* Set of backwards compatibile performance
117  monitoring events */
120  PPC_ARCH_2_07, /* ISA 2.07 - POWER8 */
121  PPC_HTM, /* Hardware Transactional Memory */
122  PPC_DSCR, /* Data stream control register */
123  PPC_EBB, /* Event base branching */
124  PPC_ISEL, /* Integer select instructions */
125  PPC_TAR, /* Target address register */
126  PPC_VEC_CRYPTO, /* Vector cryptography instructions */
127  PPC_HTM_NOSC, /* Transactions aborted when syscall made*/
128  PPC_ARCH_3_00, /* ISA 3.00 - POWER9 */
129  PPC_HAS_IEEE128, /* VSX IEEE Binary Float 128-bit */
130  PPC_DARN, /* Deliver a random number instruction */
131  PPC_SCV, /* scv syscall */
132  PPC_HTM_NO_SUSPEND, /* TM w/out suspended state */
135 
136 int GetPPCFeaturesEnumValue(const PPCFeatures* features, PPCFeaturesEnum value);
137 
139 
141 
142 #if !defined(CPU_FEATURES_ARCH_PPC)
143 #error "Including cpuinfo_ppc.h from a non-ppc target."
144 #endif
145 
146 #endif // CPU_FEATURES_INCLUDE_CPUINFO_PPC_H_
Definition: cpuinfo_ppc.h:105
Definition: cpuinfo_ppc.h:102
Definition: cpuinfo_ppc.h:106
int efpdouble
Definition: cpuinfo_ppc.h:35
PlatformType type
Definition: cpuinfo_ppc.h:82
int power5
Definition: cpuinfo_ppc.h:38
int arch206
Definition: cpuinfo_ppc.h:48
Definition: cpuinfo_ppc.h:98
Definition: hwcaps.h:177
Definition: cpuinfo_ppc.h:111
int efpsingle
Definition: cpuinfo_ppc.h:34
int truele
Definition: cpuinfo_ppc.h:51
int arch207
Definition: cpuinfo_ppc.h:53
Definition: cpuinfo_ppc.h:129
int ppc601
Definition: cpuinfo_ppc.h:27
PPCPlatformStrings GetPPCPlatformStrings(void)
Definition: cpuinfo_ppc.c:134
Definition: cpuinfo_ppc.h:92
#define CPU_FEATURES_END_CPP_NAMESPACE
Definition: cpu_features_macros.h:115
int dscr
Definition: cpuinfo_ppc.h:55
Definition: cpuinfo_ppc.h:77
Definition: cpuinfo_ppc.h:108
int htm_no_suspend
Definition: cpuinfo_ppc.h:65
Definition: cpuinfo_ppc.h:130
int power6ext
Definition: cpuinfo_ppc.h:47
Definition: cpuinfo_ppc.h:116
int cell
Definition: cpuinfo_ppc.h:40
Definition: cpuinfo_ppc.h:97
int pseries_perfmon_compat
Definition: cpuinfo_ppc.h:50
Definition: cpuinfo_ppc.h:96
int tar
Definition: cpuinfo_ppc.h:58
int altivec
Definition: cpuinfo_ppc.h:28
int vcrypto
Definition: cpuinfo_ppc.h:59
Definition: cpuinfo_ppc.h:131
int htm_nosc
Definition: cpuinfo_ppc.h:60
Definition: cpuinfo_ppc.h:115
int power4
Definition: cpuinfo_ppc.h:37
#define CPU_FEATURES_START_CPP_NAMESPACE
Definition: cpu_features_macros.h:114
int unifiedcache
Definition: cpuinfo_ppc.h:32
Definition: cpuinfo_ppc.h:24
int dfp
Definition: cpuinfo_ppc.h:46
Definition: cpuinfo_ppc.h:133
const char * GetPPCFeaturesEnumName(PPCFeaturesEnum)
Definition: cpuinfo_ppc.c:151
int no_tb
Definition: cpuinfo_ppc.h:36
PPCInfo GetPPCInfo(void)
Definition: cpuinfo_ppc.c:117
Definition: cpuinfo_ppc.h:99
Definition: cpuinfo_ppc.h:70
int isel
Definition: cpuinfo_ppc.h:57
int icachesnoop
Definition: cpuinfo_ppc.h:43
Definition: cpuinfo_ppc.h:112
Definition: cpuinfo_ppc.h:94
Definition: cpuinfo_ppc.h:125
int arch205
Definition: cpuinfo_ppc.h:44
Definition: cpuinfo_ppc.h:114
int ppc32
Definition: cpuinfo_ppc.h:25
Definition: cpuinfo_ppc.h:122
int power5plus
Definition: cpuinfo_ppc.h:39
Definition: cpuinfo_ppc.h:91
int ppc64
Definition: cpuinfo_ppc.h:26
PPCFeatures features
Definition: cpuinfo_ppc.h:71
int arch300
Definition: cpuinfo_ppc.h:61
int scv
Definition: cpuinfo_ppc.h:64
Definition: cpuinfo_ppc.h:126
int htm
Definition: cpuinfo_ppc.h:54
Definition: cpuinfo_ppc.h:127
Definition: cpuinfo_ppc.h:123
int vsx
Definition: cpuinfo_ppc.h:49
Definition: cpuinfo_ppc.h:101
int mmu
Definition: cpuinfo_ppc.h:30
Definition: cpuinfo_ppc.h:118
Definition: cpuinfo_ppc.h:104
Definition: cpuinfo_ppc.h:95
int spe
Definition: cpuinfo_ppc.h:33
Definition: cpuinfo_ppc.h:128
Definition: cpuinfo_ppc.h:132
Definition: cpuinfo_ppc.h:93
int pa6t
Definition: cpuinfo_ppc.h:45
Definition: cpuinfo_ppc.h:121
int GetPPCFeaturesEnumValue(const PPCFeatures *features, PPCFeaturesEnum value)
Definition: cpuinfo_ppc.c:145
int mac_4xx
Definition: cpuinfo_ppc.h:31
int darn
Definition: cpuinfo_ppc.h:63
int booke
Definition: cpuinfo_ppc.h:41
int ieee128
Definition: cpuinfo_ppc.h:62
Definition: cpuinfo_ppc.h:119
Definition: cpuinfo_ppc.h:120
Definition: cpuinfo_ppc.h:107
int ppcle
Definition: cpuinfo_ppc.h:52
Definition: cpuinfo_ppc.h:110
Definition: cpuinfo_ppc.h:100
PPCFeaturesEnum
Definition: cpuinfo_ppc.h:90
Definition: cpuinfo_ppc.h:113
int smt
Definition: cpuinfo_ppc.h:42
Definition: cpuinfo_ppc.h:103
int ebb
Definition: cpuinfo_ppc.h:56
Definition: cpuinfo_ppc.h:124
Definition: cpuinfo_ppc.h:109
int fpu
Definition: cpuinfo_ppc.h:29