4 #define llua_cpu /* Define the library */
6 /* Include the Lua API header files */
12 void add_string_item(lua_State
*L
, const char *item
, const char *value_str
) {
13 lua_pushstring(L
,item
);
14 lua_pushstring(L
,value_str
);
18 void add_int_item(lua_State
*L
, const char *item
, int value_int
) {
19 lua_pushstring(L
,item
);
20 lua_pushnumber(L
,value_int
);
24 static void add_flag(lua_State
*L
, bool value
, const char *value_str
) {
25 char buffer
[32] = { 0 };
26 snprintf(buffer
,sizeof(buffer
), "flags.%s",value_str
);
27 lua_pushstring(L
,buffer
);
28 // printf("%s=%d\n",value_str,value);
31 lua_pushstring(L
,"yes");
33 lua_pushstring(L
,"no");
39 static int cpu_getflags(lua_State
*L
)
47 add_string_item(L
, "vendor", lua_cpu
.vendor
);
48 add_string_item(L
, "model", lua_cpu
.model
);
49 add_int_item(L
, "cores", lua_cpu
.num_cores
);
50 add_int_item(L
, "l1_instruction_cache", lua_cpu
.l1_instruction_cache_size
);
51 add_int_item(L
, "l1_data_cache", lua_cpu
.l1_data_cache_size
);
52 add_int_item(L
, "l2_cache", lua_cpu
.l2_cache_size
);
53 add_int_item(L
, "family_id", lua_cpu
.family
);
54 add_int_item(L
, "model_id", lua_cpu
.model_id
);
55 add_int_item(L
, "stepping", lua_cpu
.stepping
);
57 add_flag(L
, lua_cpu
.flags
.fpu
, "fpu");
58 add_flag(L
, lua_cpu
.flags
.vme
, "vme");
59 add_flag(L
, lua_cpu
.flags
.de
, "de");
60 add_flag(L
, lua_cpu
.flags
.pse
, "pse");
61 add_flag(L
, lua_cpu
.flags
.tsc
, "tsc");
62 add_flag(L
, lua_cpu
.flags
.msr
, "msr");
63 add_flag(L
, lua_cpu
.flags
.pae
, "pae");
64 add_flag(L
, lua_cpu
.flags
.mce
, "mce");
65 add_flag(L
, lua_cpu
.flags
.cx8
, "cx8");
66 add_flag(L
, lua_cpu
.flags
.apic
, "apic");
67 add_flag(L
, lua_cpu
.flags
.sep
, "sep");
68 add_flag(L
, lua_cpu
.flags
.mtrr
, "mtrr");
69 add_flag(L
, lua_cpu
.flags
.pge
, "pge");
70 add_flag(L
, lua_cpu
.flags
.mca
, "mca");
71 add_flag(L
, lua_cpu
.flags
.cmov
, "cmov");
72 add_flag(L
, lua_cpu
.flags
.pat
, "pat");
73 add_flag(L
, lua_cpu
.flags
.pse_36
, "pse_36");
74 add_flag(L
, lua_cpu
.flags
.psn
, "psn");
75 add_flag(L
, lua_cpu
.flags
.clflsh
, "clflsh");
76 add_flag(L
, lua_cpu
.flags
.dts
, "dts");
77 add_flag(L
, lua_cpu
.flags
.acpi
, "acpi");
78 add_flag(L
, lua_cpu
.flags
.mmx
, "mmx");
79 add_flag(L
, lua_cpu
.flags
.sse
, "sse");
80 add_flag(L
, lua_cpu
.flags
.sse2
, "sse2");
81 add_flag(L
, lua_cpu
.flags
.ss
, "ss");
82 add_flag(L
, lua_cpu
.flags
.htt
, "ht");
83 add_flag(L
, lua_cpu
.flags
.acc
, "acc");
84 add_flag(L
, lua_cpu
.flags
.syscall
, "syscall");
85 add_flag(L
, lua_cpu
.flags
.mp
, "mp");
86 add_flag(L
, lua_cpu
.flags
.nx
, "nx");
87 add_flag(L
, lua_cpu
.flags
.mmxext
, "mmxext");
88 add_flag(L
, lua_cpu
.flags
.lm
, "lm");
89 add_flag(L
, lua_cpu
.flags
.nowext
, "3dnowext");
90 add_flag(L
, lua_cpu
.flags
.now
, "3dnow!");
91 add_flag(L
, lua_cpu
.flags
.svm
, "svm");
92 add_flag(L
, lua_cpu
.flags
.vmx
, "vmx");
93 add_flag(L
, lua_cpu
.flags
.pbe
, "pbe");
94 add_flag(L
, lua_cpu
.flags
.fxsr_opt
, "fxsr_opt");
95 add_flag(L
, lua_cpu
.flags
.gbpages
, "gbpages");
96 add_flag(L
, lua_cpu
.flags
.rdtscp
, "rdtscp");
97 add_flag(L
, lua_cpu
.flags
.pni
, "pni");
98 add_flag(L
, lua_cpu
.flags
.pclmulqd
, "pclmulqd");
99 add_flag(L
, lua_cpu
.flags
.dtes64
, "dtes64");
100 add_flag(L
, lua_cpu
.flags
.smx
, "smx");
101 add_flag(L
, lua_cpu
.flags
.est
, "est");
102 add_flag(L
, lua_cpu
.flags
.tm2
, "tm2");
103 add_flag(L
, lua_cpu
.flags
.sse3
, "sse3");
104 add_flag(L
, lua_cpu
.flags
.fma
, "fma");
105 add_flag(L
, lua_cpu
.flags
.cx16
, "cx16");
106 add_flag(L
, lua_cpu
.flags
.xtpr
, "xtpr");
107 add_flag(L
, lua_cpu
.flags
.pdcm
, "pdcm");
108 add_flag(L
, lua_cpu
.flags
.dca
, "dca");
109 add_flag(L
, lua_cpu
.flags
.xmm4_1
, "xmm4_1");
110 add_flag(L
, lua_cpu
.flags
.xmm4_2
, "xmm4_2");
111 add_flag(L
, lua_cpu
.flags
.x2apic
, "x2apic");
112 add_flag(L
, lua_cpu
.flags
.movbe
, "movbe");
113 add_flag(L
, lua_cpu
.flags
.popcnt
, "popcnt");
114 add_flag(L
, lua_cpu
.flags
.aes
, "aes");
115 add_flag(L
, lua_cpu
.flags
.xsave
, "xsave");
116 add_flag(L
, lua_cpu
.flags
.osxsave
, "osxsave");
117 add_flag(L
, lua_cpu
.flags
.avx
, "avx");
118 add_flag(L
, lua_cpu
.flags
.hypervisor
, "hypervisor");
119 add_flag(L
, lua_cpu
.flags
.ace2
, "ace2");
120 add_flag(L
, lua_cpu
.flags
.ace2_en
, "ace2_en");
121 add_flag(L
, lua_cpu
.flags
.phe
, "phe");
122 add_flag(L
, lua_cpu
.flags
.phe_en
, "phe_en");
123 add_flag(L
, lua_cpu
.flags
.pmm
, "pmm");
124 add_flag(L
, lua_cpu
.flags
.pmm_en
, "pmm_en");
125 add_flag(L
, lua_cpu
.flags
.extapic
, "extapic");
126 add_flag(L
, lua_cpu
.flags
.cr8_legacy
, "cr8_legacy");
127 add_flag(L
, lua_cpu
.flags
.abm
, "abm");
128 add_flag(L
, lua_cpu
.flags
.sse4a
, "sse4a");
129 add_flag(L
, lua_cpu
.flags
.misalignsse
, "misalignsse");
130 add_flag(L
, lua_cpu
.flags
.nowprefetch
, "3dnowprefetch");
131 add_flag(L
, lua_cpu
.flags
.osvw
, "osvw");
132 add_flag(L
, lua_cpu
.flags
.ibs
, "ibs");
133 add_flag(L
, lua_cpu
.flags
.sse5
, "sse5");
134 add_flag(L
, lua_cpu
.flags
.skinit
, "skinit");
135 add_flag(L
, lua_cpu
.flags
.wdt
, "wdt");
136 add_flag(L
, lua_cpu
.flags
.ida
, "ida");
137 add_flag(L
, lua_cpu
.flags
.arat
, "arat");
138 add_flag(L
, lua_cpu
.flags
.tpr_shadow
, "tpr_shadow");
139 add_flag(L
, lua_cpu
.flags
.vnmi
, "vnmi");
140 add_flag(L
, lua_cpu
.flags
.flexpriority
, "flexpriority");
141 add_flag(L
, lua_cpu
.flags
.ept
, "ept");
142 add_flag(L
, lua_cpu
.flags
.vpid
, "vpid");
144 /* return number of return values on stack */
148 static const luaL_Reg cpulib
[] = {
149 {"flags", cpu_getflags
},
154 LUALIB_API
int luaopen_cpu(lua_State
*L
) {
155 luaL_openlib(L
, LUA_CPULIBNAME
, cpulib
, 0);