xref: /qemu/util/cpuinfo-loongarch.c (revision 0885f122)
10885f122SRichard Henderson /*
20885f122SRichard Henderson  * SPDX-License-Identifier: GPL-2.0-or-later
30885f122SRichard Henderson  * Host specific cpu identification for LoongArch.
40885f122SRichard Henderson  */
50885f122SRichard Henderson 
60885f122SRichard Henderson #include "qemu/osdep.h"
70885f122SRichard Henderson #include "host/cpuinfo.h"
80885f122SRichard Henderson 
90885f122SRichard Henderson #ifdef CONFIG_GETAUXVAL
100885f122SRichard Henderson # include <sys/auxv.h>
110885f122SRichard Henderson #else
120885f122SRichard Henderson # include "elf.h"
130885f122SRichard Henderson #endif
140885f122SRichard Henderson #include <asm/hwcap.h>
150885f122SRichard Henderson 
160885f122SRichard Henderson unsigned cpuinfo;
170885f122SRichard Henderson 
180885f122SRichard Henderson /* Called both as constructor and (possibly) via other constructors. */
cpuinfo_init(void)190885f122SRichard Henderson unsigned __attribute__((constructor)) cpuinfo_init(void)
200885f122SRichard Henderson {
210885f122SRichard Henderson     unsigned info = cpuinfo;
220885f122SRichard Henderson     unsigned long hwcap;
230885f122SRichard Henderson 
240885f122SRichard Henderson     if (info) {
250885f122SRichard Henderson         return info;
260885f122SRichard Henderson     }
270885f122SRichard Henderson 
280885f122SRichard Henderson     hwcap = qemu_getauxval(AT_HWCAP);
290885f122SRichard Henderson 
300885f122SRichard Henderson     info = CPUINFO_ALWAYS;
310885f122SRichard Henderson     info |= (hwcap & HWCAP_LOONGARCH_LSX ? CPUINFO_LSX : 0);
320885f122SRichard Henderson 
330885f122SRichard Henderson     cpuinfo = info;
340885f122SRichard Henderson     return info;
350885f122SRichard Henderson }
36