Richard Henderson | 0885f12 | 2023-09-16 15:01:47 -0700 | [diff] [blame] | 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 | |
| 33 | cpuinfo = info; |
| 34 | return info; |
| 35 | } |