mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
linux-user: Move get_elf_hwcap to loongarch64/elfload.c
Change the return type to abi_ulong, and pass in the cpu. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
+1
-48
@@ -725,54 +725,7 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs,
|
||||
#define USE_ELF_CORE_DUMP
|
||||
#define ELF_EXEC_PAGESIZE 4096
|
||||
|
||||
#define ELF_HWCAP get_elf_hwcap()
|
||||
|
||||
/* See arch/loongarch/include/uapi/asm/hwcap.h */
|
||||
enum {
|
||||
HWCAP_LOONGARCH_CPUCFG = (1 << 0),
|
||||
HWCAP_LOONGARCH_LAM = (1 << 1),
|
||||
HWCAP_LOONGARCH_UAL = (1 << 2),
|
||||
HWCAP_LOONGARCH_FPU = (1 << 3),
|
||||
HWCAP_LOONGARCH_LSX = (1 << 4),
|
||||
HWCAP_LOONGARCH_LASX = (1 << 5),
|
||||
HWCAP_LOONGARCH_CRC32 = (1 << 6),
|
||||
HWCAP_LOONGARCH_COMPLEX = (1 << 7),
|
||||
HWCAP_LOONGARCH_CRYPTO = (1 << 8),
|
||||
HWCAP_LOONGARCH_LVZ = (1 << 9),
|
||||
HWCAP_LOONGARCH_LBT_X86 = (1 << 10),
|
||||
HWCAP_LOONGARCH_LBT_ARM = (1 << 11),
|
||||
HWCAP_LOONGARCH_LBT_MIPS = (1 << 12),
|
||||
};
|
||||
|
||||
static uint32_t get_elf_hwcap(void)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(thread_cpu);
|
||||
uint32_t hwcaps = 0;
|
||||
|
||||
hwcaps |= HWCAP_LOONGARCH_CRC32;
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[1], CPUCFG1, UAL)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_UAL;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, FP)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_FPU;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LAM)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LAM;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LSX)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LSX;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LASX)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LASX;
|
||||
}
|
||||
|
||||
return hwcaps;
|
||||
}
|
||||
#define ELF_HWCAP get_elf_hwcap(thread_cpu)
|
||||
|
||||
#define ELF_PLATFORM "loongarch"
|
||||
|
||||
|
||||
+2
-1
@@ -102,7 +102,8 @@ extern unsigned long guest_stack_size;
|
||||
const char *get_elf_cpu_model(uint32_t eflags);
|
||||
|
||||
#if defined(TARGET_I386) || defined(TARGET_X86_64) || defined(TARGET_ARM) \
|
||||
|| defined(TARGET_SPARC) || defined(TARGET_PPC)
|
||||
|| defined(TARGET_SPARC) || defined(TARGET_PPC) \
|
||||
|| defined(TARGET_LOONGARCH64)
|
||||
abi_ulong get_elf_hwcap(CPUState *cs);
|
||||
abi_ulong get_elf_hwcap2(CPUState *cs);
|
||||
#endif
|
||||
|
||||
@@ -9,3 +9,50 @@ const char *get_elf_cpu_model(uint32_t eflags)
|
||||
{
|
||||
return "la464";
|
||||
}
|
||||
|
||||
/* See arch/loongarch/include/uapi/asm/hwcap.h */
|
||||
enum {
|
||||
HWCAP_LOONGARCH_CPUCFG = (1 << 0),
|
||||
HWCAP_LOONGARCH_LAM = (1 << 1),
|
||||
HWCAP_LOONGARCH_UAL = (1 << 2),
|
||||
HWCAP_LOONGARCH_FPU = (1 << 3),
|
||||
HWCAP_LOONGARCH_LSX = (1 << 4),
|
||||
HWCAP_LOONGARCH_LASX = (1 << 5),
|
||||
HWCAP_LOONGARCH_CRC32 = (1 << 6),
|
||||
HWCAP_LOONGARCH_COMPLEX = (1 << 7),
|
||||
HWCAP_LOONGARCH_CRYPTO = (1 << 8),
|
||||
HWCAP_LOONGARCH_LVZ = (1 << 9),
|
||||
HWCAP_LOONGARCH_LBT_X86 = (1 << 10),
|
||||
HWCAP_LOONGARCH_LBT_ARM = (1 << 11),
|
||||
HWCAP_LOONGARCH_LBT_MIPS = (1 << 12),
|
||||
};
|
||||
|
||||
abi_ulong get_elf_hwcap(CPUState *cs)
|
||||
{
|
||||
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
|
||||
abi_ulong hwcaps = 0;
|
||||
|
||||
hwcaps |= HWCAP_LOONGARCH_CRC32;
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[1], CPUCFG1, UAL)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_UAL;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, FP)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_FPU;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LAM)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LAM;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LSX)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LSX;
|
||||
}
|
||||
|
||||
if (FIELD_EX32(cpu->env.cpucfg[2], CPUCFG2, LASX)) {
|
||||
hwcaps |= HWCAP_LOONGARCH_LASX;
|
||||
}
|
||||
|
||||
return hwcaps;
|
||||
}
|
||||
|
||||
@@ -6,4 +6,6 @@
|
||||
#ifndef LOONGARCH_TARGET_ELF_H
|
||||
#define LOONGARCH_TARGET_ELF_H
|
||||
|
||||
#define HAVE_ELF_HWCAP 1
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user