@@ -217,3 +217,126 @@ bool cpuinfo_x86_linux_parse_proc_cpuinfo(
217217	return  cpuinfo_linux_parse_multiline_file (
218218		"/proc/cpuinfo" , BUFFER_SIZE , (cpuinfo_line_callback )parse_line , & state );
219219}
220+ 
221+ #ifdef  __ANDROID__ 
222+ bool  cpuinfo_x86_linux_parse_cpuid_info (
223+     struct  cpuinfo_x86_cpuid_info *  x86_cpuid_info )
224+ {
225+     cpuinfo_log_debug ("reading cpuid.info file" );
226+     FILE *  fd_info  =  fopen (CPUID_INFO_FILE , "rb" );
227+     if  (!fd_info ) {
228+         cpuinfo_log_warning ("failed to open file %s: %s" , CPUID_INFO_FILE , strerror (errno ));
229+         return  false;
230+     }
231+ 
232+     int  ret  =  fread (x86_cpuid_info , sizeof (struct  cpuinfo_x86_cpuid_info ), 1 , fd_info );
233+     if  (!ret ) {
234+         cpuinfo_log_warning ("failed to read cpuid info from %s: %s" , CPUID_INFO_FILE , strerror (errno ));
235+     }
236+ 
237+     if  (fclose (fd_info )) {
238+         cpuinfo_log_warning ("failed to close file %s: %s" , CPUID_INFO_FILE , strerror (errno ));
239+     }
240+ 
241+     return  ret  ? true : false;
242+ }
243+ 
244+ #ifdef  __DEBUG__ 
245+ void  print_cpuid_info_file  (void )
246+ {
247+     cpuinfo_log_debug ("----------------------------" );
248+     /* 
249+     cpuinfo_log_debug("%-20s: %d", "ace", cpuinfo_has_x86_ace()); 
250+     cpuinfo_log_debug("%-20s: %d", "ace2", cpuinfo_has_x86_ace2()); 
251+     cpuinfo_log_debug("%-20s: %d", "clflush", cpuinfo_has_x86_clflush()); 
252+     cpuinfo_log_debug("%-20s: %d", "clflushopt", cpuinfo_has_x86_clflushopt()); 
253+     cpuinfo_log_debug("%-20s: %d", "lwp", cpuinfo_has_x86_lwp()); 
254+     cpuinfo_log_debug("%-20s: %d", "msr", cpuinfo_has_x86_msr()); 
255+     cpuinfo_log_debug("%-20s: %d", "phe", cpuinfo_has_x86_phe()); 
256+     cpuinfo_log_debug("%-20s: %d", "pmm", cpuinfo_has_x86_pmm()); 
257+     cpuinfo_log_debug("%-20s: %d", "rng", cpuinfo_has_x86_rng()); 
258+     cpuinfo_log_debug("%-20s: %d", "sysenter", cpuinfo_has_x86_sysenter()); 
259+     cpuinfo_log_debug("%-20s: %d", "syscall", cpuinfo_has_x86_syscall()); 
260+     cpuinfo_log_debug("%-20s: %d", "emmx", cpuinfo_has_x86_emmx()); 
261+     cpuinfo_log_debug("%-20s: %d", "fs_gs_base", cpuinfo_has_x86_fs_gs_base()); 
262+     cpuinfo_log_debug("%-20s: %d", "fxsave", cpuinfo_has_x86_fxsave()); 
263+     */ 
264+     cpuinfo_log_debug ("%-20s: %d" , "erms" , cpuinfo_has_x86_erms ());
265+     cpuinfo_log_debug ("%-20s: %d" , "smap" , cpuinfo_has_x86_smap ());
266+     cpuinfo_log_debug ("%-20s: %d" , "serialize" , cpuinfo_has_x86_serialize ());
267+     cpuinfo_log_debug ("%-20s: %d" , "adx" , cpuinfo_has_x86_adx ());
268+     cpuinfo_log_debug ("%-20s: %d" , "aes" , cpuinfo_has_x86_aes ());
269+     cpuinfo_log_debug ("%-20s: %d" , "avx" , cpuinfo_has_x86_avx ());
270+     cpuinfo_log_debug ("%-20s: %d" , "avx2" , cpuinfo_has_x86_avx2 ());
271+     cpuinfo_log_debug ("%-20s: %d" , "avx512bf16" , cpuinfo_has_x86_avx512bf16 ());
272+     cpuinfo_log_debug ("%-20s: %d" , "avx512bitalg" , cpuinfo_has_x86_avx512bitalg ());
273+     cpuinfo_log_debug ("%-20s: %d" , "avx512bw" , cpuinfo_has_x86_avx512bw ());
274+     cpuinfo_log_debug ("%-20s: %d" , "avx512cd" , cpuinfo_has_x86_avx512cd ());
275+     cpuinfo_log_debug ("%-20s: %d" , "avx512dq" , cpuinfo_has_x86_avx512dq ());
276+     cpuinfo_log_debug ("%-20s: %d" , "avx512er" , cpuinfo_has_x86_avx512er ());
277+     cpuinfo_log_debug ("%-20s: %d" , "avx512f" , cpuinfo_has_x86_avx512f ());
278+     cpuinfo_log_debug ("%-20s: %d" , "avx512ifma" , cpuinfo_has_x86_avx512ifma ());
279+     cpuinfo_log_debug ("%-20s: %d" , "avx512pf" , cpuinfo_has_x86_avx512pf ());
280+     cpuinfo_log_debug ("%-20s: %d" , "avx512vbmi" , cpuinfo_has_x86_avx512vbmi ());
281+     cpuinfo_log_debug ("%-20s: %d" , "avx512vbmi2" , cpuinfo_has_x86_avx512vbmi2 ());
282+     cpuinfo_log_debug ("%-20s: %d" , "avx512vl" , cpuinfo_has_x86_avx512vl ());
283+     cpuinfo_log_debug ("%-20s: %d" , "avx512vnni" , cpuinfo_has_x86_avx512vnni ());
284+     cpuinfo_log_debug ("%-20s: %d" , "avx512vp2intersect" , cpuinfo_has_x86_avx512vp2intersect ());
285+     cpuinfo_log_debug ("%-20s: %d" , "avx512vpopcntdq" , cpuinfo_has_x86_avx512vpopcntdq ());
286+     cpuinfo_log_debug ("%-20s: %d" , "avx512_4fmaps" , cpuinfo_has_x86_avx512_4fmaps ());
287+     cpuinfo_log_debug ("%-20s: %d" , "avx512_4vnniw" , cpuinfo_has_x86_avx512_4vnniw ());
288+     cpuinfo_log_debug ("%-20s: %d" , "bmi" , cpuinfo_has_x86_bmi ());
289+     cpuinfo_log_debug ("%-20s: %d" , "bmi2" , cpuinfo_has_x86_bmi2 ());
290+     cpuinfo_log_debug ("%-20s: %d" , "clwb" , cpuinfo_has_x86_clwb ());
291+     cpuinfo_log_debug ("%-20s: %d" , "clzero" , cpuinfo_has_x86_clzero ());
292+     cpuinfo_log_debug ("%-20s: %d" , "cmpxchg16b" , cpuinfo_has_x86_cmpxchg16b ());
293+     cpuinfo_log_debug ("%-20s: %d" , "f16c" , cpuinfo_has_x86_f16c ());
294+     cpuinfo_log_debug ("%-20s: %d" , "fma3" , cpuinfo_has_x86_fma3 ());
295+     cpuinfo_log_debug ("%-20s: %d" , "fma4" , cpuinfo_has_x86_fma4 ());
296+     cpuinfo_log_debug ("%-20s: %d" , "gfni" , cpuinfo_has_x86_gfni ());
297+     cpuinfo_log_debug ("%-20s: %d" , "hle" , cpuinfo_has_x86_hle ());
298+     cpuinfo_log_debug ("%-20s: %d" , "lzcnt" , cpuinfo_has_x86_lzcnt ());
299+     cpuinfo_log_debug ("%-20s: %d" , "misaligned_sse" , cpuinfo_has_x86_misaligned_sse ());
300+     cpuinfo_log_debug ("%-20s: %d" , "movbe" , cpuinfo_has_x86_movbe ());
301+     cpuinfo_log_debug ("%-20s: %d" , "mpx" , cpuinfo_has_x86_mpx ());
302+     cpuinfo_log_debug ("%-20s: %d" , "mwait" , cpuinfo_has_x86_mwait ());
303+     cpuinfo_log_debug ("%-20s: %d" , "mwaitx" , cpuinfo_has_x86_mwaitx ());
304+     cpuinfo_log_debug ("%-20s: %d" , "pclmulqdq" , cpuinfo_has_x86_pclmulqdq ());
305+     cpuinfo_log_debug ("%-20s: %d" , "popcnt" , cpuinfo_has_x86_popcnt ());
306+     cpuinfo_log_debug ("%-20s: %d" , "prefetch" , cpuinfo_has_x86_prefetch ());
307+     cpuinfo_log_debug ("%-20s: %d" , "prefetchw" , cpuinfo_has_x86_prefetchw ());
308+     cpuinfo_log_debug ("%-20s: %d" , "prefetchwt1" , cpuinfo_has_x86_prefetchwt1 ());
309+     cpuinfo_log_debug ("%-20s: %d" , "rdpid" , cpuinfo_has_x86_rdpid ());
310+     cpuinfo_log_debug ("%-20s: %d" , "rdrand" , cpuinfo_has_x86_rdrand ());
311+     cpuinfo_log_debug ("%-20s: %d" , "rdseed" , cpuinfo_has_x86_rdseed ());
312+     cpuinfo_log_debug ("%-20s: %d" , "rdtscp" , cpuinfo_has_x86_rdtscp ());
313+     cpuinfo_log_debug ("%-20s: %d" , "rtm" , cpuinfo_has_x86_rtm ());
314+     cpuinfo_log_debug ("%-20s: %d" , "sha" , cpuinfo_has_x86_sha ());
315+     cpuinfo_log_debug ("%-20s: %d" , "sse3" , cpuinfo_has_x86_sse3 ());
316+     cpuinfo_log_debug ("%-20s: %d" , "sse4a" , cpuinfo_has_x86_sse4a ());
317+     cpuinfo_log_debug ("%-20s: %d" , "sse4_1" , cpuinfo_has_x86_sse4_1 ());
318+     cpuinfo_log_debug ("%-20s: %d" , "sse4_2" , cpuinfo_has_x86_sse4_2 ());
319+     cpuinfo_log_debug ("%-20s: %d" , "ssse3" , cpuinfo_has_x86_ssse3 ());
320+     cpuinfo_log_debug ("%-20s: %d" , "tbm" , cpuinfo_has_x86_tbm ());
321+     cpuinfo_log_debug ("%-20s: %d" , "three_d_now" , cpuinfo_has_x86_3dnow ());
322+     cpuinfo_log_debug ("%-20s: %d" , "three_d_now_plus" , cpuinfo_has_x86_3dnow_plus ());
323+     cpuinfo_log_debug ("%-20s: %d" , "vaes" , cpuinfo_has_x86_vaes ());
324+     cpuinfo_log_debug ("%-20s: %d" , "vpclmulqdq" , cpuinfo_has_x86_vpclmulqdq ());
325+     cpuinfo_log_debug ("%-20s: %d" , "xop" , cpuinfo_has_x86_xop ());
326+     cpuinfo_log_debug ("%-20s: %d" , "xsave" , cpuinfo_has_x86_xsave ());
327+     cpuinfo_log_debug ("%-20s: %d" , "xtest" , cpuinfo_has_x86_xtest ());
328+     cpuinfo_log_debug ("%-20s: %d" , "cmov" , cpuinfo_has_x86_cmov ());
329+     cpuinfo_log_debug ("%-20s: %d" , "cmpxchg8b" , cpuinfo_has_x86_cmpxchg8b ());
330+     cpuinfo_log_debug ("%-20s: %d" , "daz" , cpuinfo_has_x86_daz ());
331+     cpuinfo_log_debug ("%-20s: %d" , "fpu" , cpuinfo_has_x86_fpu ());
332+     cpuinfo_log_debug ("%-20s: %d" , "mmx" , cpuinfo_has_x86_mmx ());
333+     cpuinfo_log_debug ("%-20s: %d" , "mmx_plus" , cpuinfo_has_x86_mmx_plus ());
334+     cpuinfo_log_debug ("%-20s: %d" , "rdtsc" , cpuinfo_has_x86_rdtsc ());
335+     cpuinfo_log_debug ("%-20s: %d" , "sse" , cpuinfo_has_x86_sse ());
336+     cpuinfo_log_debug ("%-20s: %d" , "sse2" , cpuinfo_has_x86_sse2 ());
337+     cpuinfo_log_debug ("%-20s: %d" , "three_d_now_geode" , cpuinfo_has_x86_3dnow_geode ());
338+     cpuinfo_log_debug ("%-20s: %d" , "lahf_sahf" , cpuinfo_has_x86_lahf_sahf ());
339+     cpuinfo_log_debug ("----------------------------" );
340+ }
341+ #endif 	// __DEBUG__ 
342+ #endif 	// __ANDROID__ 
0 commit comments