~eloaders/i-nex/I-Nex

« back to all changes in this revision

Viewing changes to cpu.c

  • Committer: eloaders
  • Date: 2014-01-28 15:38:51 UTC
  • Revision ID: git-v1:a9d4d76e750bd7099de36a91c6794f7dc093861a
New uname JSON. MV files to JSON folder. Fixes in thermal.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Copyright(C) 2014, Michał Głowienka aka eloaders <eloaders@linux.pl>
2
 
 *
3
 
 * This program is free software; you can redistribute it and/or
4
 
 * modify it under the terms of the GNU General Public License
5
 
 * as published by the Free Software Foundation; either version 3
6
 
 * of the License, or (at your option) any later version.
7
 
 *
8
 
 * This program is distributed in the hope that it will be useful,
9
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
 * GNU General Public License for more details.
12
 
 *
13
 
 * You should have received a copy of the GNU Library General Public
14
 
 * License along with this program; if not, write to the Free Software
15
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
16
 
 *
17
 
 */
18
 
 
19
 
#include <stdio.h>
20
 
#include <libcpuid.h>
21
 
int main(void)
22
 
{
23
 
        if (!cpuid_present()) {                                                // check for CPUID presence
24
 
                printf("Sorry, your CPU doesn't support CPUID!\n");
25
 
                return -1;
26
 
        }
27
 
        struct cpu_raw_data_t raw;                                             // contains only raw data
28
 
        struct cpu_id_t data;                                                  // contains recognized CPU features data
29
 
        if (cpuid_get_raw_data(&raw) < 0) {                                    // obtain the raw CPUID data
30
 
                printf("Sorry, cannot get the CPUID raw data.\n");
31
 
                printf("Error: %s\n", cpuid_error());                          // cpuid_error() gives the last error description
32
 
                return -2;
33
 
        }
34
 
        if (cpu_identify(&raw, &data) < 0) {                                   // identify the CPU, using the given raw data.
35
 
                printf("Sorrry, CPU identification failed.\n");
36
 
                printf("Error: %s\n", cpuid_error());
37
 
                return -3;
38
 
        }
39
 
        /**int a, b;
40
 
 
41
 
        for (a = 0; a < 5; a++)
42
 
        {
43
 
          __asm__("cpuid"
44
 
            :"=a"(b)                 // EAX into b (output)
45
 
            :"0"(a)                  // a into EAX (input)
46
 
            :"%ebx","%ecx","%edx");  // clobbered registers
47
 
 
48
 
        printf("The code %i gives %i\n", a, b);
49
 
        }*/
50
 
        struct cpu_mark_t mark;
51
 
        cpu_tsc_mark(&mark);
52
 
        cpu_tsc_unmark(&mark);
53
 
        printf("{\n");
54
 
        printf("        \"VENDOR_STR\": \"%s\",\n", data.vendor_str);                 //
55
 
        printf("        \"CPU_CODENAME\": \"%s\",\n", data.cpu_codename);             //
56
 
        printf("        \"BRAND_STR\": \"%s\",\n", data.brand_str);                   //
57
 
        printf("        \"NUM_CORES\": \"%d\",\n", data.num_cores);                   //
58
 
        printf("        \"NUM_LOGICAL_CPUS\": \"%d\",\n", data.num_logical_cpus);     //
59
 
        printf("        \"TOTAL_LOGICAL_CPUS\": \"%d\",\n", data.total_logical_cpus); //
60
 
        printf("        \"FAMILY\": \"%d\",\n", data.family);                         //
61
 
        printf("        \"MODEL\": \"%d\",\n", data.model);                           //
62
 
        printf("        \"STEPPING\": \"%d\",\n", data.stepping);                     //
63
 
        printf("        \"EXT_FAMILY\": \"%d\",\n", data.ext_family);                 //
64
 
        printf("        \"EXT_MODEL\": \"%d\",\n", data.ext_model);                   //
65
 
        printf("        \"CPU_CLOCK\": \"%d\",\n", cpu_clock());                      //
66
 
        printf("        \"CPU_CLOCK_BY_OS\": \"%d\",\n", cpu_clock_by_os());          //
67
 
        printf("        \"CPU_CLOCK_BY_IC\": \"%d\",\n", cpu_clock_by_ic(200, 0));    //
68
 
        printf("        \"CPU_CLOCK_MEASURE\": \"%d\",\n", cpu_clock_measure(200, 0));//
69
 
        printf("        \"MARK_TSC\": \"%llu\",\n", mark.tsc);                        //
70
 
        printf("        \"MARK_SYS_CLOCK\": \"%llu\",\n", mark.sys_clock);            //
71
 
        printf("                        \"Flags\": {\n");
72
 
        printf("                        \"1\": {\n");
73
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MMXEXT] ? "1 ," : "0 ,");
74
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MMXEXT\",\n");
75
 
        printf("                                        \"FEATURE\": \"mmxext\",\n");
76
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/MMX_(instruction_set)\",\n");
77
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
78
 
        printf("                                        \"DESC\": \"AMD MMX-extended instructions supported\"\n");
79
 
        printf("                        },\n");
80
 
        printf("                        \"2\": {\n");
81
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE] ? "1 ," : "0 ,");
82
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE\",\n");
83
 
        printf("                                        \"FEATURE\": \"sse\",\n");
84
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions\",\n");
85
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
86
 
        printf("                                        \"DESC\": \"Streaming-SIMD Extensions (SSE) supported\"\n");
87
 
        printf("                        },\n");
88
 
        printf("                        \"3\": {\n");
89
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE2] ? "1 ," : "0 ,");
90
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE2\",\n");
91
 
        printf("                                        \"FEATURE\": \"sse2\",\n");
92
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE2\",\n");
93
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
94
 
        printf("                                        \"DESC\": \"SSE2 instructions supported\"\n");
95
 
        printf("                        },\n");
96
 
        printf("                        \"4\": {\n");
97
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_3DNOW] ? "1 ," : "0 ,");
98
 
        printf("                                        \"NAME\": \"CPU_FEATURE_3DNOW\",\n");
99
 
        printf("                                        \"FEATURE\": \"3dnow\",\n");
100
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/3DNow!\",\n");
101
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
102
 
        printf("                                        \"DESC\": \"AMD 3DNow! instructions supported\"\n");
103
 
        printf("                        },\n");
104
 
        printf("                        \"5\": {\n");
105
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_VME] ? "1 ," : "0 ,");
106
 
        printf("                                        \"NAME\": \"CPU_FEATURE_VME\",\n");
107
 
        printf("                                        \"FEATURE\": \"vme\",\n");
108
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Virtual_8086_mode\",\n");
109
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
110
 
        printf("                                        \"DESC\": \"Virtual mode extension\"\n");
111
 
        printf("                        },\n");
112
 
        printf("                        \"6\": {\n");
113
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CLFLUSH] ? "1 ," : "0 ,");
114
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CLFLUSH\",\n");
115
 
        printf("                                        \"FEATURE\": \"clflush\",\n");
116
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
117
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
118
 
        printf("                                        \"DESC\": \"CLFLUSH instruction supported\"\n");
119
 
        printf("                        },\n");
120
 
        printf("                        \"7\": {\n");
121
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSSE3] ? "1 ," : "0 ,");
122
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSSE3\",\n");
123
 
        printf("                                        \"FEATURE\": \"ssse3\",\n");
124
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE3\",\n");
125
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
126
 
        printf("                                        \"DESC\": \"SSSE3 instructionss supported (this is different from SSE3!)\"\n");
127
 
        printf("                        },\n");
128
 
        printf("                        \"8\": {\n");
129
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_LM] ? "1 ," : "0 ,");
130
 
        printf("                                        \"NAME\": \"CPU_FEATURE_LM\",\n");
131
 
        printf("                                        \"FEATURE\": \"lm\",\n");
132
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
133
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
134
 
        printf("                                        \"DESC\": \"Long mode (x86_64/EM64T) supported\"\n");
135
 
        printf("                        },\n");
136
 
        printf("                        \"9\": {\n");
137
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_LAHF_LM] ? "1 ," : "0 ,");
138
 
        printf("                                        \"NAME\": \"CPU_FEATURE_LAHF_LM\",\n");
139
 
        printf("                                        \"FEATURE\": \"lahf_lm\",\n");
140
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
141
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
142
 
        printf("                                        \"DESC\": \"LAHF/SAHF supported in 64-bit mode\"\n");
143
 
        printf("                        },\n");
144
 
        printf("                        \"10\": {\n");
145
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MTRR] ? "1 ," : "0 ,");
146
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MTRR\",\n");
147
 
        printf("                                        \"FEATURE\": \"mtrr\",\n");
148
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Memory_type_range_register\",\n");
149
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
150
 
        printf("                                        \"DESC\": \"Memory type range registers\"\n");
151
 
        printf("                        },\n");
152
 
        printf("                        \"11\": {\n");
153
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_ACPI] ? "1 ," : "0 ,");
154
 
        printf("                                        \"NAME\": \"CPU_FEATURE_ACPI\",\n");
155
 
        printf("                                        \"FEATURE\": \"acpi\",\n");
156
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Acpi\",\n");
157
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
158
 
        printf("                                        \"DESC\": \"ACPI support (power states)\"\n");
159
 
        printf("                        },\n");
160
 
        printf("                        \"12\": {\n");
161
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_VMX] ? "1 ," : "0 ,");
162
 
        printf("                                        \"NAME\": \"CPU_FEATURE_VMX\",\n");
163
 
        printf("                                        \"FEATURE\": \"vmx\",\n");
164
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/X86_virtualization\",\n");
165
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
166
 
        printf("                                        \"DESC\": \"Virtualization technology supported\"\n");
167
 
        printf("                        },\n");
168
 
        printf("                        \"13\": {\n");
169
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SYSCALL] ? "1 ," : "0 ,");
170
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SYSCALL\",\n");
171
 
        printf("                                        \"FEATURE\": \"syscall\",\n");
172
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Syscall\",\n");
173
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
174
 
        printf("                                        \"DESC\": \"SYSCALL / SYSRET instructions supported\"\n");
175
 
        printf("                        },\n");
176
 
        printf("                        \"14\": {\n");
177
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_DTS64] ? "1 ," : "0 ,");
178
 
        printf("                                        \"NAME\": \"CPU_FEATURE_DTS64\",\n");
179
 
        printf("                                        \"FEATURE\": \"dts64\",\n");
180
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
181
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
182
 
        printf("                                        \"DESC\": \"64-bit Debug store supported\"\n");
183
 
        printf("                        },\n");
184
 
        printf("                        \"15\": {\n");
185
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_FPU] ? "1 ," : "0 ,");
186
 
        printf("                                        \"NAME\": \"CPU_FEATURE_FPU\",\n");
187
 
        printf("                                        \"FEATURE\": \"fpu\",\n");
188
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Floating-point_unit\",\n");
189
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
190
 
        printf("                                        \"DESC\": \"Floating point unit\"\n");
191
 
        printf("                        },\n");
192
 
        printf("                        \"16\": {\n");
193
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_DE] ? "1 ," : "0 ,");
194
 
        printf("                                        \"NAME\": \"CPU_FEATURE_DE\",\n");
195
 
        printf("                                        \"FEATURE\": \"de\",\n");
196
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
197
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
198
 
        printf("                                        \"DESC\": \"Debugging extension\"\n");
199
 
        printf("                        },\n");
200
 
        printf("                        \"17\": {\n");
201
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_VME] ? "1 ," : "0 ,");
202
 
        printf("                                        \"NAME\": \"CPU_FEATURE_VME\",\n");
203
 
        printf("                                        \"FEATURE\": \"vme\",\n");
204
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Virtual_8086_mode\",\n");
205
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
206
 
        printf("                                        \"DESC\": \"Virtual mode extension\"\n");
207
 
        printf("                        },\n");
208
 
        printf("                        \"18\": {\n");
209
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PSE] ? "1 ," : "0 ,");
210
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PSE\",\n");
211
 
        printf("                                        \"FEATURE\": \"pse\",\n");
212
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Page_Size_Extension\",\n");
213
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
214
 
        printf("                                        \"DESC\": \"Page size extension\"\n");
215
 
        printf("                        },\n");
216
 
        printf("                        \"19\": {\n");
217
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TSC] ? "1 ," : "0 ,");
218
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TSC\",\n");
219
 
        printf("                                        \"FEATURE\": \"tsc\",\n");
220
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Time_Stamp_Counter\",\n");
221
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
222
 
        printf("                                        \"DESC\": \"Time-stamp counter\"\n");
223
 
        printf("                        },\n");
224
 
        printf("                        \"20\": {\n");
225
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MSR] ? "1 ," : "0 ,");
226
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MSR\",\n");
227
 
        printf("                                        \"FEATURE\": \"msr\",\n");
228
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Model-specific_register\",\n");
229
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
230
 
        printf("                                        \"DESC\": \"Model-specific regsisters, RDMSR/WRMSR supported\"\n");
231
 
        printf("                        },\n");
232
 
        printf("                        \"21\": {\n");
233
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PAE] ? "1 ," : "0 ,");
234
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PAE\",\n");
235
 
        printf("                                        \"FEATURE\": \"pae\",\n");
236
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Physical_Address_Extension\",\n");
237
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
238
 
        printf("                                        \"DESC\": \"Physical address extension\"\n");
239
 
        printf("                        },\n");
240
 
        printf("                        \"22\": {\n");
241
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MCE] ? "1 ," : "0 ,");
242
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MCE\",\n");
243
 
        printf("                                        \"FEATURE\": \"mce\",\n");
244
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Machine-check_exception\",\n");
245
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
246
 
        printf("                                        \"DESC\": \"Machine check exception\"\n");
247
 
        printf("                        },\n");
248
 
        printf("                        \"23\": {\n");
249
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CX8] ? "1 ," : "0 ,");
250
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CX8\",\n");
251
 
        printf("                                        \"FEATURE\": \"cx8\",\n");
252
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
253
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
254
 
        printf("                                        \"DESC\": \"CMPXCHG8/CMPXCHG8B instruction supported\"\n");
255
 
        printf("                        },\n");
256
 
        printf("                        \"24\": {\n");
257
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_APIC] ? "1 ," : "0 ,");
258
 
        printf("                                        \"NAME\": \"CPU_FEATURE_APIC\",\n");
259
 
        printf("                                        \"FEATURE\": \"apic\",\n");
260
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Advanced_Programmable_Interrupt_Controller\",\n");
261
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
262
 
        printf("                                        \"DESC\": \"Advanced Programmable Interrupt Controller support\"\n");
263
 
        printf("                        },\n");
264
 
        printf("                        \"25\": {\n");
265
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_X2APIC] ? "1 ," : "0 ,");
266
 
        printf("                                        \"NAME\": \"CPU_FEATURE_X2APIC\",\n");
267
 
        printf("                                        \"FEATURE\": \"x2apic\",\n");
268
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/X2APIC\",\n");
269
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
270
 
        printf("                                        \"DESC\": \"Intel 64 Architecture x2APIC Specification\"\n");
271
 
        printf("                        },\n");
272
 
        printf("                        \"26\": {\n");
273
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SEP] ? "1 ," : "0 ,");
274
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SEP\",\n");
275
 
        printf("                                        \"FEATURE\": \"sep\",\n");
276
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Call_gate\",\n");
277
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
278
 
        printf("                                        \"DESC\": \"SYSENTER / SYSEXIT instructions supported\"\n");
279
 
        printf("                        },\n");
280
 
        printf("                        \"27\": {\n");
281
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PGE] ? "1 ," : "0 ,");
282
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PGE\",\n");
283
 
        printf("                                        \"FEATURE\": \"pge\",\n");
284
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Translation_lookaside_buffer\",\n");
285
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
286
 
        printf("                                        \"DESC\": \"Page global enable\"\n");
287
 
        printf("                        },\n");
288
 
        printf("                        \"28\": {\n");
289
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MCA] ? "1 ," : "0 ,");
290
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MCA\",\n");
291
 
        printf("                                        \"FEATURE\": \"mca\",\n");
292
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Machine_check_architecture\",\n");
293
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
294
 
        printf("                                        \"DESC\": \"Machine check architecture\"\n");
295
 
        printf("                        },\n");
296
 
        printf("                        \"29\": {\n");
297
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CMOV] ? "1 ," : "0 ,");
298
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CMOV\",\n");
299
 
        printf("                                        \"FEATURE\": \"cmov\",\n");
300
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
301
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
302
 
        printf("                                        \"DESC\": \"CMOVxx instructions supported\"\n");
303
 
        printf("                        },\n");
304
 
        printf("                        \"30\": {\n");
305
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PAT] ? "1 ," : "0 ,");
306
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PAT\",\n");
307
 
        printf("                                        \"FEATURE\": \"pat\",\n");
308
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Page_attribute_table\",\n");
309
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
310
 
        printf("                                        \"DESC\": \"Page attribute table\"\n");
311
 
        printf("                        },\n");
312
 
        printf("                        \"31\": {\n");
313
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PSE36] ? "1 ," : "0 ,");
314
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PSE36\",\n");
315
 
        printf("                                        \"FEATURE\": \"pse36\",\n");
316
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Physical_Address_Extension\",\n");
317
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
318
 
        printf("                                        \"DESC\": \"36-bit page address extension\"\n");
319
 
        printf("                        },\n");
320
 
        printf("                        \"32\": {\n");
321
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PN] ? "1 ," : "0 ,");
322
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PN\",\n");
323
 
        printf("                                        \"FEATURE\": \"pt\",\n");
324
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
325
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
326
 
        printf("                                        \"DESC\": \"Processor serial # implemented (Intel P3 only)\"\n");
327
 
        printf("                        },\n");
328
 
        printf("                        \"33\": {\n");
329
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_DTS] ? "1 ," : "0 ,");
330
 
        printf("                                        \"NAME\": \"CPU_FEATURE_DTS\",\n");
331
 
        printf("                                        \"FEATURE\": \"dts\",\n");
332
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
333
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
334
 
        printf("                                        \"DESC\": \"Debug store supported\"\n");
335
 
        printf("                        },\n");
336
 
        printf("                        \"34\": {\n");
337
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SS] ? "1 ," : "0 ,");
338
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SS\",\n");
339
 
        printf("                                        \"FEATURE\": \"ss\",\n");
340
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Ss\",\n");
341
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
342
 
        printf("                                        \"DESC\": \"Self-snoop\"\n");
343
 
        printf("                        },\n");
344
 
        printf("                        \"35\": {\n");
345
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TM] ? "1 ," : "0 ,");
346
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TM\",\n");
347
 
        printf("                                        \"FEATURE\": \"tm\",\n");
348
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
349
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
350
 
        printf("                                        \"DESC\": \"Thermal monitor\"\n");
351
 
        printf("                        },\n");
352
 
        printf("                        \"36\": {\n");
353
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_IA64] ? "1 ," : "0 ,");
354
 
        printf("                                        \"NAME\": \"CPU_FEATURE_IA64\",\n");
355
 
        printf("                                        \"FEATURE\": \"ia64\",\n");
356
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Ia64\",\n");
357
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
358
 
        printf("                                        \"DESC\": \"IA64 supported (Itanium only)\"\n");
359
 
        printf("                        },\n");
360
 
        printf("                        \"37\": {\n");
361
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PBE] ? "1 ," : "0 ,");
362
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PBE\",\n");
363
 
        printf("                                        \"FEATURE\": \"pbe\",\n");
364
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
365
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
366
 
        printf("                                        \"DESC\": \"Pending-break enable\"\n");
367
 
        printf("                        },\n");
368
 
        printf("                        \"38\": {\n");
369
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PNI] ? "1 ," : "0 ,");
370
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PNI\",\n");
371
 
        printf("                                        \"FEATURE\": \"pni\",\n");
372
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE3\",\n");
373
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
374
 
        printf("                                        \"DESC\": \"PNI (SSE3) instructions supported\"\n");
375
 
        printf("                        },\n");
376
 
        printf("                        \"39\": {\n");
377
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PCLMUL] ? "1 ," : "0 ,");
378
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PCLMUL\",\n");
379
 
        printf("                                        \"FEATURE\": \"pclmul\",\n");
380
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
381
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
382
 
        printf("                                        \"DESC\": \"PCLMULQDQ instruction supported\"\n");
383
 
        printf("                        },\n");
384
 
        printf("                        \"40\": {\n");
385
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MONITOR] ? "1 ," : "0 ,");
386
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MONITOR\",\n");
387
 
        printf("                                        \"FEATURE\": \"monitor\",\n");
388
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
389
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
390
 
        printf("                                        \"DESC\": \"MONITOR / MWAIT supported\"\n");
391
 
        printf("                        },\n");
392
 
        printf("                        \"41\": {\n");
393
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_DS_CPL] ? "1 ," : "0 ,");
394
 
        printf("                                        \"NAME\": \"CPU_FEATURE_DS_CPL\",\n");
395
 
        printf("                                        \"FEATURE\": \"ds_cpl\",\n");
396
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
397
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
398
 
        printf("                                        \"DESC\": \"CPL Qualified Debug Store\"\n");
399
 
        printf("                        },\n");
400
 
        printf("                        \"42\": {\n");
401
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SMX] ? "1 ," : "0 ,");
402
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SMX\",\n");
403
 
        printf("                                        \"FEATURE\": \"smx\",\n");
404
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/LaGrande\",\n");
405
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
406
 
        printf("                                        \"DESC\": \"Safer mode exceptions\"\n");
407
 
        printf("                        },\n");
408
 
        printf("                        \"43\": {\n");
409
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_EST] ? "1 ," : "0 ,");
410
 
        printf("                                        \"NAME\": \"CPU_FEATURE_EST\",\n");
411
 
        printf("                                        \"FEATURE\": \"est\",\n");
412
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SpeedStep\",\n");
413
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
414
 
        printf("                                        \"DESC\": \"Enhanced SpeedStep\"\n");
415
 
        printf("                        },\n");
416
 
        printf("                        \"44\": {\n");
417
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TM2] ? "1 ," : "0 ,");
418
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TM2\",\n");
419
 
        printf("                                        \"FEATURE\": \"tm2\",\n");
420
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Tm2\",\n");
421
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
422
 
        printf("                                        \"DESC\": \"Thermal monitor 2\"\n");
423
 
        printf("                        },\n");
424
 
        printf("                        \"45\": {\n");
425
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CID] ? "1 ," : "0 ,");
426
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CID\",\n");
427
 
        printf("                                        \"FEATURE\": \"cid\",\n");
428
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
429
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
430
 
        printf("                                        \"DESC\": \"Context ID supported\"\n");
431
 
        printf("                        },\n");
432
 
        printf("                        \"46\": {\n");
433
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CX16] ? "1 ," : "0 ,");
434
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CX16\",\n");
435
 
        printf("                                        \"FEATURE\": \"cx16\",\n");
436
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
437
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
438
 
        printf("                                        \"DESC\": \"CMPXCHG16B instruction supported\"\n");
439
 
        printf("                        },\n");
440
 
        printf("                        \"47\": {\n");
441
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_XTPR] ? "1 ," : "0 ,");
442
 
        printf("                                        \"NAME\": \"CPU_FEATURE_XTPR\",\n");
443
 
        printf("                                        \"FEATURE\": \"xtpr\",\n");
444
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
445
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
446
 
        printf("                                        \"DESC\": \"Send Task Priority Messages disable\"\n");
447
 
        printf("                        },\n");
448
 
        printf("                        \"48\": {\n");
449
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_PDCM] ? "1 ," : "0 ,");
450
 
        printf("                                        \"NAME\": \"CPU_FEATURE_PDCM\",\n");
451
 
        printf("                                        \"FEATURE\": \"pdcm\",\n");
452
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
453
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
454
 
        printf("                                        \"DESC\": \"Performance capabilities MSR supported\"\n");
455
 
        printf("                        },\n");
456
 
        printf("                        \"49\": {\n");
457
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_DCA] ? "1 ," : "0 ,");
458
 
        printf("                                        \"NAME\": \"CPU_FEATURE_DCA\",\n");
459
 
        printf("                                        \"FEATURE\": \"dca\",\n");
460
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
461
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
462
 
        printf("                                        \"DESC\": \"Direct cache access supported\"\n");
463
 
        printf("                        },\n");
464
 
        printf("                        \"50\": {\n");
465
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE4_1] ? "1 ," : "0 ,");
466
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE4_1\",\n");
467
 
        printf("                                        \"FEATURE\": \"sse4_1\",\n");
468
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE4\",\n");
469
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
470
 
        printf("                                        \"DESC\": \"SSE 4.1 instructions supported\"\n");
471
 
        printf("                        },\n");
472
 
        printf("                        \"51\": {\n");
473
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE4_2] ? "1 ," : "0 ,");
474
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE4_2\",\n");
475
 
        printf("                                        \"FEATURE\": \"sse4_2\",\n");
476
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE4\",\n");
477
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
478
 
        printf("                                        \"DESC\": \"SSE 4.2 instructions supported\"\n");
479
 
        printf("                        },\n");
480
 
        printf("                        \"52\": {\n");
481
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SYSCALL] ? "1 ," : "0 ,");
482
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SYSCALL\",\n");
483
 
        printf("                                        \"FEATURE\": \"syscall\",\n");
484
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
485
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
486
 
        printf("                                        \"DESC\": \"SYSCALL / SYSRET instructions supported\"\n");
487
 
        printf("                        },\n");
488
 
        printf("                        \"53\": {\n");
489
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_XD] ? "1 ," : "0 ,");
490
 
        printf("                                        \"NAME\": \"CPU_FEATURE_XD\",\n");
491
 
        printf("                                        \"FEATURE\": \"xd\",\n");
492
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
493
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
494
 
        printf("                                        \"DESC\": \"Execute disable bit supported\"\n");
495
 
        printf("                        },\n");
496
 
        printf("                        \"54\": {\n");
497
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MOVBE] ? "1 ," : "0 ,");
498
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MOVBE\",\n");
499
 
        printf("                                        \"FEATURE\": \"movbe\",\n");
500
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
501
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
502
 
        printf("                                        \"DESC\": \"MOVBE instruction supported\"\n");
503
 
        printf("                        },\n");
504
 
        printf("                        \"55\": {\n");
505
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_POPCNT] ? "1 ," : "0 ,");
506
 
        printf("                                        \"NAME\": \"CPU_FEATURE_POPCNT\",\n");
507
 
        printf("                                        \"FEATURE\": \"popcnt\",\n");
508
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Hamming_weight\",\n");
509
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
510
 
        printf("                                        \"DESC\": \"POPCNT instruction supported\"\n");
511
 
        printf("                        },\n");
512
 
        printf("                        \"56\": {\n");
513
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_AES] ? "1 ," : "0 ,");
514
 
        printf("                                        \"NAME\": \"CPU_FEATURE_AES\",\n");
515
 
        printf("                                        \"FEATURE\": \"aes\",\n");
516
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/AES_instruction_set\",\n");
517
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
518
 
        printf("                                        \"DESC\": \"AES* instructions supported\"\n");
519
 
        printf("                        },\n");
520
 
        printf("                        \"57\": {\n");
521
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_XSAVE] ? "1 ," : "0 ,");
522
 
        printf("                                        \"NAME\": \"CPU_FEATURE_XSAVE\",\n");
523
 
        printf("                                        \"FEATURE\": \"xsave\",\n");
524
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions\",\n");
525
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
526
 
        printf("                                        \"DESC\": \"XSAVE/XRSTOR/etc instructions supported\"\n");
527
 
        printf("                        },\n");
528
 
        printf("                        \"58\": {\n");
529
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_OSXSAVE] ? "1 ," : "0 ,");
530
 
        printf("                                        \"NAME\": \"CPU_FEATURE_OSXSAVE\",\n");
531
 
        printf("                                        \"FEATURE\": \"osxsave\",\n");
532
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions\",\n");
533
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
534
 
        printf("                                        \"DESC\": \"non-privileged copy of OSXSAVE supported\"\n");
535
 
        printf("                        },\n");
536
 
        printf("                        \"59\": {\n");
537
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_AVX] ? "1 ," : "0 ,");
538
 
        printf("                                        \"NAME\": \"CPU_FEATURE_AVX\",\n");
539
 
        printf("                                        \"FEATURE\": \"avx\",\n");
540
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Advanced_Vector_Extensions\",\n");
541
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
542
 
        printf("                                        \"DESC\": \"Advanced vector extensions supported\"\n");
543
 
        printf("                        },\n");
544
 
        printf("                        \"60\": {\n");
545
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_3DNOWEXT] ? "1 ," : "0 ,");
546
 
        printf("                                        \"NAME\": \"CPU_FEATURE_3DNOWEXT\",\n");
547
 
        printf("                                        \"FEATURE\": \"3dnowext\",\n");
548
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/3DNow!\",\n");
549
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
550
 
        printf("                                        \"DESC\": \"AMD 3DNow! extended instructions supported\"\n");
551
 
        printf("                        },\n");
552
 
        printf("                        \"61\": {\n");
553
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_NX] ? "1 ," : "0 ,");
554
 
        printf("                                        \"NAME\": \"CPU_FEATURE_NX\",\n");
555
 
        printf("                                        \"FEATURE\": \"nx\",\n");
556
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/NX_bit\",\n");
557
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
558
 
        printf("                                        \"DESC\": \"No-execute bit supported\"\n");
559
 
        printf("                        },\n");
560
 
        printf("                        \"62\": {\n");
561
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_FXSR_OPT] ? "1 ," : "0 ,");
562
 
        printf("                                        \"NAME\": \"CPU_FEATURE_FXSR_OPT\",\n");
563
 
        printf("                                        \"FEATURE\": \"opt\",\n");
564
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
565
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
566
 
        printf("                                        \"DESC\": \"FFXSR: FXSAVE and FXRSTOR optimizations\"\n");
567
 
        printf("                        },\n");
568
 
        printf("                        \"63\": {\n");
569
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_RDTSCP] ? "1 ," : "0 ,");
570
 
        printf("                                        \"NAME\": \"CPU_FEATURE_RDTSCP\",\n");
571
 
        printf("                                        \"FEATURE\": \"rdtscp\",\n");
572
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Time_Stamp_Counter\",\n");
573
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
574
 
        printf("                                        \"DESC\": \"RDTSCP instruction supported (AMD-only)\"\n");
575
 
        printf("                        },\n");
576
 
        printf("                        \"64\": {\n");
577
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_LM] ? "1 ," : "0 ,");
578
 
        printf("                                        \"NAME\": \"CPU_FEATURE_LM\",\n");
579
 
        printf("                                        \"FEATURE\": \"lm\",\n");
580
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
581
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
582
 
        printf("                                        \"DESC\": \"Long mode (x86_64/EM64T) supported\"\n");
583
 
        printf("                        },\n");
584
 
        printf("                        \"65\": {\n");
585
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_LAHF_LM] ? "1 ," : "0 ,");
586
 
        printf("                                        \"NAME\": \"CPU_FEATURE_LAHF_LM\",\n");
587
 
        printf("                                        \"FEATURE\": \"lahf_lm\",\n");
588
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
589
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
590
 
        printf("                                        \"DESC\": \"LAHF/SAHF supported in 64-bit mode\"\n");
591
 
        printf("                        },\n");
592
 
        printf("                        \"66\": {\n");
593
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CMP_LEGACY] ? "1 ," : "0 ,");
594
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CMP_LEGACY\",\n");
595
 
        printf("                                        \"FEATURE\": \"cmp_legacy\",\n");
596
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
597
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
598
 
        printf("                                        \"DESC\": \"Core multi-processing legacy mode\"\n");
599
 
        printf("                        },\n");
600
 
        printf("                        \"67\": {\n");
601
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SVM] ? "1 ," : "0 ,");
602
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SVM\",\n");
603
 
        printf("                                        \"FEATURE\": \"svm\",\n");
604
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
605
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
606
 
        printf("                                        \"DESC\": \"AMD Secure virtual machine\"\n");
607
 
        printf("                        },\n");
608
 
        printf("                        \"68\": {\n");
609
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE4A] ? "1 ," : "0 ,");
610
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE4A\",\n");
611
 
        printf("                                        \"FEATURE\": \"sse4a\",\n");
612
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE4\",\n");
613
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
614
 
        printf("                                        \"DESC\": \"SSE 4a from AMD\"\n");
615
 
        printf("                        },\n");
616
 
        printf("                        \"69\": {\n");
617
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MISALIGNSSE] ? "1 ," : "0 ,");
618
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MISALIGNSSE\",\n");
619
 
        printf("                                        \"FEATURE\": \"misalignsse\",\n");
620
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
621
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
622
 
        printf("                                        \"DESC\": \"Misaligned SSE supported\"\n");
623
 
        printf("                        },\n");
624
 
        printf("                        \"70\": {\n");
625
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_ABM] ? "1 ," : "0 ,");
626
 
        printf("                                        \"NAME\": \"CPU_FEATURE_ABM\",\n");
627
 
        printf("                                        \"FEATURE\": \"abm\",\n");
628
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets\",\n");
629
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
630
 
        printf("                                        \"DESC\": \"LZCNT instruction support\"\n");
631
 
        printf("                        },\n");
632
 
        printf("                        \"71\": {\n");
633
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_3DNOWPREFETCH] ? "1 ," : "0 ,");
634
 
        printf("                                        \"NAME\": \"CPU_FEATURE_3DNOWPREFETCH\",\n");
635
 
        printf("                                        \"FEATURE\": \"3dnowprefetch\",\n");
636
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/3DNow!\",\n");
637
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
638
 
        printf("                                        \"DESC\": \"PREFETCH/PREFETCHW support\"\n");
639
 
        printf("                        },\n");
640
 
        printf("                        \"72\": {\n");
641
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_OSVW] ? "1 ," : "0 ,");
642
 
        printf("                                        \"NAME\": \"CPU_FEATURE_OSVW\",\n");
643
 
        printf("                                        \"FEATURE\": \"osvw\",\n");
644
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
645
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
646
 
        printf("                                        \"DESC\": \"OS Visible Workaround (AMD)\"\n");
647
 
        printf("                        },\n");
648
 
        printf("                        \"73\": {\n");
649
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_IBS] ? "1 ," : "0 ,");
650
 
        printf("                                        \"NAME\": \"CPU_FEATURE_IBS\",\n");
651
 
        printf("                                        \"FEATURE\": \"ibs\",\n");
652
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Hardware_performance_counter\",\n");
653
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
654
 
        printf("                                        \"DESC\": \"Instruction-based sampling\"\n");
655
 
        printf("                        },\n");
656
 
        printf("                        \"74\": {\n");
657
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SSE5] ? "1 ," : "0 ,");
658
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SSE5\",\n");
659
 
        printf("                                        \"FEATURE\": \"sse5\",\n");
660
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/SSE5\",\n");
661
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
662
 
        printf("                                        \"DESC\": \"SSE 5 instructions supported (deprecated, will never be 1)\"\n");
663
 
        printf("                        },\n");
664
 
        printf("                        \"75\": {\n");
665
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_SKINIT] ? "1 ," : "0 ,");
666
 
        printf("                                        \"NAME\": \"CPU_FEATURE_SKINIT\",\n");
667
 
        printf("                                        \"FEATURE\": \"skinit\",\n");
668
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
669
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
670
 
        printf("                                        \"DESC\": \"SKINIT / STGI supported\"\n");
671
 
        printf("                        },\n");
672
 
        printf("                        \"76\": {\n");
673
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_WDT] ? "1 ," : "0 ,");
674
 
        printf("                                        \"NAME\": \"CPU_FEATURE_WDT\",\n");
675
 
        printf("                                        \"FEATURE\": \"wdt\",\n");
676
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Watchdog_timer\",\n");
677
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
678
 
        printf("                                        \"DESC\": \"Watchdog timer support\"\n");
679
 
        printf("                        },\n");
680
 
        printf("                        \"77\": {\n");
681
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TS] ? "1 ," : "0 ,");
682
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TS\",\n");
683
 
        printf("                                        \"FEATURE\": \"ts\",\n");
684
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
685
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
686
 
        printf("                                        \"DESC\": \"Temperature sensor\"\n");
687
 
        printf("                        },\n");
688
 
        printf("                        \"78\": {\n");
689
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_FID] ? "1 ," : "0 ,");
690
 
        printf("                                        \"NAME\": \"CPU_FEATURE_FID\",\n");
691
 
        printf("                                        \"FEATURE\": \"fid\",\n");
692
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
693
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
694
 
        printf("                                        \"DESC\": \"Frequency ID control\"\n");
695
 
        printf("                        },\n");
696
 
        printf("                        \"79\": {\n");
697
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_VID] ? "1 ," : "0 ,");
698
 
        printf("                                        \"NAME\": \"CPU_FEATURE_VID\",\n");
699
 
        printf("                                        \"FEATURE\": \"vid\",\n");
700
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
701
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
702
 
        printf("                                        \"DESC\": \"Voltage ID control\"\n");
703
 
        printf("                        },\n");
704
 
        printf("                        \"80\": {\n");
705
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TTP] ? "1 ," : "0 ,");
706
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TTP\",\n");
707
 
        printf("                                        \"FEATURE\": \"ttp\",\n");
708
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
709
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
710
 
        printf("                                        \"DESC\": \"THERMTRIP\"\n");
711
 
        printf("                        },\n");
712
 
        printf("                        \"81\": {\n");
713
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TM_AMD] ? "1 ," : "0 ,");
714
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TM_AMD\",\n");
715
 
        printf("                                        \"FEATURE\": \"tm_amd\",\n");
716
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
717
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
718
 
        printf("                                        \"DESC\": \"AMD-specified hardware thermal control\"\n");
719
 
        printf("                        },\n");
720
 
        printf("                        \"82\": {\n");
721
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_STC] ? "1 ," : "0 ,");
722
 
        printf("                                        \"NAME\": \"CPU_FEATURE_STC\",\n");
723
 
        printf("                                        \"FEATURE\": \"stc\",\n");
724
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
725
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
726
 
        printf("                                        \"DESC\": \"Software thermal control\"\n");
727
 
        printf("                        },\n");
728
 
        printf("                        \"83\": {\n");
729
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_100MHZSTEPS] ? "1 ," : "0 ,");
730
 
        printf("                                        \"NAME\": \"CPU_FEATURE_100MHZSTEPS\",\n");
731
 
        printf("                                        \"FEATURE\": \"100mhzsteps\",\n");
732
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
733
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
734
 
        printf("                                        \"DESC\": \"100 MHz multiplier control\"\n");
735
 
        printf("                        },\n");
736
 
        printf("                        \"84\": {\n");
737
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_HWPSTATE] ? "1 ," : "0 ,");
738
 
        printf("                                        \"NAME\": \"CPU_FEATURE_HWPSTATE\",\n");
739
 
        printf("                                        \"FEATURE\": \"hwpstate\",\n");
740
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
741
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
742
 
        printf("                                        \"DESC\": \"Hardware P-state control\"\n");
743
 
        printf("                        },\n");
744
 
        printf("                        \"85\": {\n");
745
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_CONSTANT_TSC] ? "1 ," : "0 ,");
746
 
        printf("                                        \"NAME\": \"CPU_FEATURE_CONSTANT_TSC\",\n");
747
 
        printf("                                        \"FEATURE\": \"constant_tsc\",\n");
748
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Time_Stamp_Counter\",\n");
749
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
750
 
        printf("                                        \"DESC\": \"TSC ticks at constant rate\"\n");
751
 
        printf("                        },\n");
752
 
        printf("                        \"86\": {\n");
753
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_XOP] ? "1 ," : "0 ,");
754
 
        printf("                                        \"NAME\": \"CPU_FEATURE_XOP\",\n");
755
 
        printf("                                        \"FEATURE\": \"xop\",\n");
756
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
757
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
758
 
        printf("                                        \"DESC\": \"The XOP instruction set (same as the old CPU_FEATURE_SSE5)\"\n");
759
 
        printf("                        },\n");
760
 
        printf("                        \"87\": {\n");
761
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_FMA3] ? "1 ," : "0 ,");
762
 
        printf("                                        \"NAME\": \"CPU_FEATURE_FMA3\",\n");
763
 
        printf("                                        \"FEATURE\": \"fma3\",\n");
764
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/FMA_instruction_set\",\n");
765
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
766
 
        printf("                                        \"DESC\": \"The FMA3 instruction set\"\n");
767
 
        printf("                        },\n");
768
 
        printf("                        \"88\": {\n");
769
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_FMA4] ? "1 ," : "0 ,");
770
 
        printf("                                        \"NAME\": \"CPU_FEATURE_FMA4\",\n");
771
 
        printf("                                        \"FEATURE\": \"fma4\",\n");
772
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/FMA_instruction_set\",\n");
773
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
774
 
        printf("                                        \"DESC\": \"The FMA4 instruction set\"\n");
775
 
        printf("                        },\n");
776
 
        printf("                        \"89\": {\n");
777
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_TBM] ? "1 ," : "0 ,");
778
 
        printf("                                        \"NAME\": \"CPU_FEATURE_TBM\",\n");
779
 
        printf("                                        \"FEATURE\": \"tbm\",\n");
780
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
781
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
782
 
        printf("                                        \"DESC\": \"Trailing bit manipulation instruction support\"\n");
783
 
        printf("                        },\n");
784
 
        printf("                        \"90\": {\n");
785
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_F16C] ? "1 ," : "0 ,");
786
 
        printf("                                        \"NAME\": \"CPU_FEATURE_F16C\",\n");
787
 
        printf("                                        \"FEATURE\": \"f16c\",\n");
788
 
        printf("                                        \"WEBSITE\": \"mmxext\",\n");
789
 
        printf("                                        \"HAVEWEBSITE\": 0 ,\n");
790
 
        printf("                                        \"DESC\": \"16-bit FP convert instruction support\"\n");
791
 
        printf("                        },\n");
792
 
        printf("                        \"91\": {\n");
793
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_RDRAND] ? "1 ," : "0 ,");
794
 
        printf("                                        \"NAME\": \"CPU_FEATURE_RDRAND\",\n");
795
 
        printf("                                        \"FEATURE\": \"rdrand\",\n");
796
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/RdRand\",\n");
797
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
798
 
        printf("                                        \"DESC\": \"RdRand instruction\"\n");
799
 
        printf("                        },\n");
800
 
        printf("                        \"92\": {\n");
801
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_HT] ? "1 ," : "0 ,");
802
 
        printf("                                        \"NAME\": \"CPU_FEATURE_HT\",\n");
803
 
        printf("                                        \"FEATURE\": \"ht\",\n");
804
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Hyper-Threading\",\n");
805
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
806
 
        printf("                                        \"DESC\": \"Hyper-threading supported (but might be disabled)\"\n");
807
 
        printf("                        },\n");
808
 
        printf("                        \"93\": {\n");
809
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MMX] ? "1 ," : "0 ,");
810
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MMX\",\n");
811
 
        printf("                                        \"FEATURE\": \"mmx\",\n");
812
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/MMX_(instruction_set)\",\n");
813
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
814
 
        printf("                                        \"DESC\": \"MMX instruction set supported\"\n");
815
 
        printf("                        },\n");
816
 
        printf("                        \"94\": {\n");
817
 
        printf("                                        \"VALUE\": %s \n", data.flags[CPU_FEATURE_MTRR] ? "1 ," : "0 ,");
818
 
        printf("                                        \"NAME\": \"CPU_FEATURE_MTRR\",\n");
819
 
        printf("                                        \"FEATURE\": \"mtrr\",\n");
820
 
        printf("                                        \"WEBSITE\": \"http://en.wikipedia.org/wiki/Memory_type_range_register\",\n");
821
 
        printf("                                        \"HAVEWEBSITE\": 1 ,\n");
822
 
        printf("                                        \"DESC\": \"Memory type range registers\"\n");
823
 
        printf("                        }\n");
824
 
        printf("        },\n");
825
 
        printf("        \"L1_DATA_CACHE\": \"%d\",\n", data.l1_data_cache);
826
 
        printf("        \"L1_INSTRUCTION_CACHE\": \"%d\",\n", data.l1_instruction_cache);
827
 
        printf("        \"L2_CACHE\": \"%d\",\n", data.l2_cache);
828
 
        printf("        \"L3_CACHE\": \"%d\",\n", data.l3_cache);
829
 
        printf("        \"L1_ASSOC\": \"%d\",\n", data.l1_assoc);
830
 
        printf("        \"L2_ASSOC\": \"%d\",\n", data.l2_assoc);
831
 
        printf("        \"L3_ASSOC\": \"%d\",\n", data.l3_assoc);
832
 
        printf("        \"L1_CACHELINE\": \"%d\",\n", data.l1_cacheline);
833
 
        printf("        \"L2_CACHELINE\": \"%d\",\n", data.l2_cacheline);
834
 
        printf("        \"L3_CACHELINE\": \"%d\",\n", data.l3_cacheline);
835
 
        printf("        \"SSE_SIZE\": \"%d\"\n", data.sse_size);
836
 
        printf("}\n");
837
 
        return 0;
838
 
}
 
 
b'\\ No newline at end of file'