1 /* 2 * SPDX-License-Identifier: GPL-2.0-or-later 3 * Host specific cpu identification for LoongArch. 4 */ 5 6 #include "qemu/osdep.h" 7 #include "host/cpuinfo.h" 8 9 #ifdef CONFIG_GETAUXVAL 10 # include <sys/auxv.h> 11 #else 12 # include "elf.h" 13 #endif 14 #include <asm/hwcap.h> 15 16 unsigned cpuinfo; 17 18 /* Called both as constructor and (possibly) via other constructors. */ 19 unsigned __attribute__((constructor)) cpuinfo_init(void) 20 { 21 unsigned info = cpuinfo; 22 unsigned long hwcap; 23 24 if (info) { 25 return info; 26 } 27 28 hwcap = qemu_getauxval(AT_HWCAP); 29 30 info = CPUINFO_ALWAYS; 31 info |= (hwcap & HWCAP_LOONGARCH_LSX ? CPUINFO_LSX : 0); 32 info |= (hwcap & HWCAP_LOONGARCH_LASX ? CPUINFO_LASX : 0); 33 34 cpuinfo = info; 35 return info; 36 } 37