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_
#define CPU_FEATURES_START_CPP_NAMESPACE
Definition: cpu_features_macros.h:114
#define CPU_FEATURES_END_CPP_NAMESPACE
Definition: cpu_features_macros.h:115
int GetPPCFeaturesEnumValue(const PPCFeatures *features, PPCFeaturesEnum value)
Definition: cpuinfo_ppc.c:145
const char * GetPPCFeaturesEnumName(PPCFeaturesEnum)
Definition: cpuinfo_ppc.c:151
PPCInfo GetPPCInfo(void)
Definition: cpuinfo_ppc.c:117
PPCFeaturesEnum
Definition: cpuinfo_ppc.h:90
@ PPC_PPC_LE
Definition: cpuinfo_ppc.h:119
@ PPC_32
Definition: cpuinfo_ppc.h:91
@ PPC_POWER6_EXT
Definition: cpuinfo_ppc.h:113
@ PPC_HAS_MMU
Definition: cpuinfo_ppc.h:96
@ PPC_PA6T
Definition: cpuinfo_ppc.h:111
@ PPC_HTM_NO_SUSPEND
Definition: cpuinfo_ppc.h:132
@ PPC_CELL
Definition: cpuinfo_ppc.h:106
@ PPC_HAS_EFP_SINGLE
Definition: cpuinfo_ppc.h:100
@ PPC_601_INSTR
Definition: cpuinfo_ppc.h:93
@ PPC_HAS_DFP
Definition: cpuinfo_ppc.h:112
@ PPC_UNIFIED_CACHE
Definition: cpuinfo_ppc.h:98
@ PPC_HAS_IEEE128
Definition: cpuinfo_ppc.h:129
@ PPC_ISEL
Definition: cpuinfo_ppc.h:124
@ PPC_LAST_
Definition: cpuinfo_ppc.h:133
@ PPC_POWER4
Definition: cpuinfo_ppc.h:103
@ PPC_DSCR
Definition: cpuinfo_ppc.h:122
@ PPC_POWER5_PLUS
Definition: cpuinfo_ppc.h:105
@ PPC_ARCH_2_05
Definition: cpuinfo_ppc.h:110
@ PPC_HTM
Definition: cpuinfo_ppc.h:121
@ PPC_TRUE_LE
Definition: cpuinfo_ppc.h:118
@ PPC_ICACHE_SNOOP
Definition: cpuinfo_ppc.h:109
@ PPC_VEC_CRYPTO
Definition: cpuinfo_ppc.h:126
@ PPC_SCV
Definition: cpuinfo_ppc.h:131
@ PPC_HAS_SPE
Definition: cpuinfo_ppc.h:99
@ PPC_HAS_EFP_DOUBLE
Definition: cpuinfo_ppc.h:101
@ PPC_NO_TB
Definition: cpuinfo_ppc.h:102
@ PPC_SMT
Definition: cpuinfo_ppc.h:108
@ PPC_HAS_4xxMAC
Definition: cpuinfo_ppc.h:97
@ PPC_HAS_VSX
Definition: cpuinfo_ppc.h:115
@ PPC_HAS_ALTIVEC
Definition: cpuinfo_ppc.h:94
@ PPC_BOOKE
Definition: cpuinfo_ppc.h:107
@ PPC_DARN
Definition: cpuinfo_ppc.h:130
@ PPC_ARCH_3_00
Definition: cpuinfo_ppc.h:128
@ PPC_64
Definition: cpuinfo_ppc.h:92
@ PPC_TAR
Definition: cpuinfo_ppc.h:125
@ PPC_PSERIES_PERFMON_COMPAT
Definition: cpuinfo_ppc.h:116
@ PPC_HAS_FPU
Definition: cpuinfo_ppc.h:95
@ PPC_ARCH_2_07
Definition: cpuinfo_ppc.h:120
@ PPC_EBB
Definition: cpuinfo_ppc.h:123
@ PPC_POWER5
Definition: cpuinfo_ppc.h:104
@ PPC_HTM_NOSC
Definition: cpuinfo_ppc.h:127
@ PPC_ARCH_2_06
Definition: cpuinfo_ppc.h:114
PPCPlatformStrings GetPPCPlatformStrings(void)
Definition: cpuinfo_ppc.c:134
Definition: cpuinfo_ppc.h:24
int darn
Definition: cpuinfo_ppc.h:63
int booke
Definition: cpuinfo_ppc.h:41
int cell
Definition: cpuinfo_ppc.h:40
int power6ext
Definition: cpuinfo_ppc.h:47
int ppc601
Definition: cpuinfo_ppc.h:27
int spe
Definition: cpuinfo_ppc.h:33
int ppcle
Definition: cpuinfo_ppc.h:52
int arch205
Definition: cpuinfo_ppc.h:44
int arch206
Definition: cpuinfo_ppc.h:48
int dfp
Definition: cpuinfo_ppc.h:46
int vcrypto
Definition: cpuinfo_ppc.h:59
int tar
Definition: cpuinfo_ppc.h:58
int icachesnoop
Definition: cpuinfo_ppc.h:43
int ppc64
Definition: cpuinfo_ppc.h:26
int htm_nosc
Definition: cpuinfo_ppc.h:60
int htm_no_suspend
Definition: cpuinfo_ppc.h:65
int smt
Definition: cpuinfo_ppc.h:42
int efpsingle
Definition: cpuinfo_ppc.h:34
int scv
Definition: cpuinfo_ppc.h:64
int mmu
Definition: cpuinfo_ppc.h:30
int truele
Definition: cpuinfo_ppc.h:51
int altivec
Definition: cpuinfo_ppc.h:28
int mac_4xx
Definition: cpuinfo_ppc.h:31
int power4
Definition: cpuinfo_ppc.h:37
int power5plus
Definition: cpuinfo_ppc.h:39
int pseries_perfmon_compat
Definition: cpuinfo_ppc.h:50
int unifiedcache
Definition: cpuinfo_ppc.h:32
int htm
Definition: cpuinfo_ppc.h:54
int vsx
Definition: cpuinfo_ppc.h:49
int power5
Definition: cpuinfo_ppc.h:38
int isel
Definition: cpuinfo_ppc.h:57
int ppc32
Definition: cpuinfo_ppc.h:25
int fpu
Definition: cpuinfo_ppc.h:29
int ieee128
Definition: cpuinfo_ppc.h:62
int efpdouble
Definition: cpuinfo_ppc.h:35
int ebb
Definition: cpuinfo_ppc.h:56
int arch207
Definition: cpuinfo_ppc.h:53
int arch300
Definition: cpuinfo_ppc.h:61
int dscr
Definition: cpuinfo_ppc.h:55
int no_tb
Definition: cpuinfo_ppc.h:36
int pa6t
Definition: cpuinfo_ppc.h:45
Definition: cpuinfo_ppc.h:70
PPCFeatures features
Definition: cpuinfo_ppc.h:71
Definition: cpuinfo_ppc.h:77
PlatformType type
Definition: cpuinfo_ppc.h:82
Definition: hwcaps.h:177