Re: [PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses
Hi, 在 2023/5/5 下午9:24, WANG Xuerui 写道: Hi, On 2023/5/3 15:06, Richard Henderson wrote: This should be true of all server class loongarch64. And desktop-class (i.e. all Loongson-3 series). Signed-off-by: Richard Henderson --- tcg/loongarch64/tcg-target.c.inc | 6 ++ 1 file changed, 6 insertions(+) diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc index e651ec5c71..ccc13ffdb4 100644 --- a/tcg/loongarch64/tcg-target.c.inc +++ b/tcg/loongarch64/tcg-target.c.inc @@ -30,6 +30,7 @@ */ #include "../tcg-ldst.c.inc" +#include #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { @@ -1674,6 +1675,11 @@ static void tcg_target_qemu_prologue(TCGContext *s) static void tcg_target_init(TCGContext *s) { + unsigned long hwcap = qemu_getauxval(AT_HWCAP); + + /* All server class loongarch have UAL; only embedded do not. */ + assert(hwcap & HWCAP_LOONGARCH_UAL); + It is a bit worrying that a future SoC (the octa-core Loongson 2K3000) might get used for light desktop use cases (e.g. laptops) where QEMU is arguably relevant, but it's currently unclear whether its LA364 micro-architecture will have UAL. The Loongson folks may have more to share. 'LA364' support UAL. Thanks. Song Gao
Re: [PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses
Hi, On 2023/5/3 15:06, Richard Henderson wrote: This should be true of all server class loongarch64. And desktop-class (i.e. all Loongson-3 series). Signed-off-by: Richard Henderson --- tcg/loongarch64/tcg-target.c.inc | 6 ++ 1 file changed, 6 insertions(+) diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc index e651ec5c71..ccc13ffdb4 100644 --- a/tcg/loongarch64/tcg-target.c.inc +++ b/tcg/loongarch64/tcg-target.c.inc @@ -30,6 +30,7 @@ */ #include "../tcg-ldst.c.inc" +#include #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { @@ -1674,6 +1675,11 @@ static void tcg_target_qemu_prologue(TCGContext *s) static void tcg_target_init(TCGContext *s) { +unsigned long hwcap = qemu_getauxval(AT_HWCAP); + +/* All server class loongarch have UAL; only embedded do not. */ +assert(hwcap & HWCAP_LOONGARCH_UAL); + It is a bit worrying that a future SoC (the octa-core Loongson 2K3000) might get used for light desktop use cases (e.g. laptops) where QEMU is arguably relevant, but it's currently unclear whether its LA364 micro-architecture will have UAL. The Loongson folks may have more to share. tcg_target_available_regs[TCG_TYPE_I32] = ALL_GENERAL_REGS; tcg_target_available_regs[TCG_TYPE_I64] = ALL_GENERAL_REGS;
Re: [PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses
On Wed, 3 May 2023 at 08:15, Richard Henderson wrote: > > This should be true of all server class loongarch64. By this do you mean "anything that runs Linux" ? If not, we should be a bit more user-friendly about bailing out than just assert()ing. For the "tried to run on an ARMv5" case we use error_report and exit: error_report("TCG: ARMv%d is unsupported; exiting", arm_arch); exit(EXIT_FAILURE); thanks -- PMM
[PATCH v4 36/57] tcg/loongarch64: Assert the host supports unaligned accesses
This should be true of all server class loongarch64. Signed-off-by: Richard Henderson --- tcg/loongarch64/tcg-target.c.inc | 6 ++ 1 file changed, 6 insertions(+) diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc index e651ec5c71..ccc13ffdb4 100644 --- a/tcg/loongarch64/tcg-target.c.inc +++ b/tcg/loongarch64/tcg-target.c.inc @@ -30,6 +30,7 @@ */ #include "../tcg-ldst.c.inc" +#include #ifdef CONFIG_DEBUG_TCG static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = { @@ -1674,6 +1675,11 @@ static void tcg_target_qemu_prologue(TCGContext *s) static void tcg_target_init(TCGContext *s) { +unsigned long hwcap = qemu_getauxval(AT_HWCAP); + +/* All server class loongarch have UAL; only embedded do not. */ +assert(hwcap & HWCAP_LOONGARCH_UAL); + tcg_target_available_regs[TCG_TYPE_I32] = ALL_GENERAL_REGS; tcg_target_available_regs[TCG_TYPE_I64] = ALL_GENERAL_REGS; -- 2.34.1