[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 09/84] include/qemu/cpuid: Introduce xgetbv_low
From: |
Richard Henderson |
Subject: |
[PULL 09/84] include/qemu/cpuid: Introduce xgetbv_low |
Date: |
Sun, 5 Mar 2023 16:38:39 -0800 |
Replace the two uses of asm to expand xgetbv with an inline function.
Since one of the two has been using the mnemonic, assume that the
comment about "older versions of the assember" is obsolete, as even
that is 4 years old.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
include/qemu/cpuid.h | 7 +++++++
util/bufferiszero.c | 3 +--
tcg/i386/tcg-target.c.inc | 11 ++++-------
3 files changed, 12 insertions(+), 9 deletions(-)
diff --git a/include/qemu/cpuid.h b/include/qemu/cpuid.h
index 7adb12d320..1451e8ef2f 100644
--- a/include/qemu/cpuid.h
+++ b/include/qemu/cpuid.h
@@ -71,4 +71,11 @@
#define bit_LZCNT (1 << 5)
#endif
+static inline unsigned xgetbv_low(unsigned c)
+{
+ unsigned a, d;
+ asm("xgetbv" : "=a"(a), "=d"(d) : "c"(c));
+ return a;
+}
+
#endif /* QEMU_CPUID_H */
diff --git a/util/bufferiszero.c b/util/bufferiszero.c
index 1790ded7d4..1886bc5ba4 100644
--- a/util/bufferiszero.c
+++ b/util/bufferiszero.c
@@ -258,8 +258,7 @@ static void __attribute__((constructor))
init_cpuid_cache(void)
/* We must check that AVX is not just available, but usable. */
if ((c & bit_OSXSAVE) && (c & bit_AVX) && max >= 7) {
- int bv;
- __asm("xgetbv" : "=a"(bv), "=d"(d) : "c"(0));
+ unsigned bv = xgetbv_low(0);
__cpuid_count(7, 0, a, b, c, d);
if ((bv & 0x6) == 0x6 && (b & bit_AVX2)) {
cache |= CACHE_AVX2;
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
index 883ced8168..028ece62a0 100644
--- a/tcg/i386/tcg-target.c.inc
+++ b/tcg/i386/tcg-target.c.inc
@@ -4156,12 +4156,9 @@ static void tcg_target_init(TCGContext *s)
/* There are a number of things we must check before we can be
sure of not hitting invalid opcode. */
if (c & bit_OSXSAVE) {
- unsigned xcrl, xcrh;
- /* The xgetbv instruction is not available to older versions of
- * the assembler, so we encode the instruction manually.
- */
- asm(".byte 0x0f, 0x01, 0xd0" : "=a" (xcrl), "=d" (xcrh) : "c" (0));
- if ((xcrl & 6) == 6) {
+ unsigned bv = xgetbv_low(0);
+
+ if ((bv & 6) == 6) {
have_avx1 = (c & bit_AVX) != 0;
have_avx2 = (b7 & bit_AVX2) != 0;
@@ -4172,7 +4169,7 @@ static void tcg_target_init(TCGContext *s)
* check that OPMASK and all extended ZMM state are enabled
* even if we're not using them -- the insns will fault.
*/
- if ((xcrl & 0xe0) == 0xe0
+ if ((bv & 0xe0) == 0xe0
&& (b7 & bit_AVX512F)
&& (b7 & bit_AVX512VL)) {
have_avx512vl = true;
--
2.34.1
- [PULL 00/84] tcg patch queue, Richard Henderson, 2023/03/05
- [PULL 01/84] tcg: Include "qemu/timer.h" for profile_getclock, Richard Henderson, 2023/03/05
- [PULL 02/84] tcg: Link branches to the labels, Richard Henderson, 2023/03/05
- [PULL 05/84] accel/tcg: Retain prot flags from tlb_fill, Richard Henderson, 2023/03/05
- [PULL 03/84] tcg: Merge two sequential labels, Richard Henderson, 2023/03/05
- [PULL 06/84] accel/tcg: Honor TLB_DISCARD_WRITE in atomic_mmu_lookup, Richard Henderson, 2023/03/05
- [PULL 08/84] accel/tcg: Trigger watchpoints from atomic_mmu_lookup, Richard Henderson, 2023/03/05
- [PULL 18/84] target/arm: Drop DisasContext.tmp_a64, Richard Henderson, 2023/03/05
- [PULL 17/84] target/arm: Drop tcg_temp_free from translator.c, Richard Henderson, 2023/03/05
- [PULL 09/84] include/qemu/cpuid: Introduce xgetbv_low,
Richard Henderson <=
- [PULL 16/84] target/arm: Remove value_global from DisasCompare, Richard Henderson, 2023/03/05
- [PULL 30/84] target/avr: Drop R from trans_COM, Richard Henderson, 2023/03/05
- [PULL 13/84] accel/tcg: Remove translator_loop_temp_check, Richard Henderson, 2023/03/05
- [PULL 04/84] target/sparc: Use tlb_set_page_full, Richard Henderson, 2023/03/05
- [PULL 07/84] softmmu: Check watchpoints for read+write at once, Richard Henderson, 2023/03/05
- [PULL 10/84] tcg/i386: Mark Win64 call-saved vector regs as reserved, Richard Henderson, 2023/03/05
- [PULL 11/84] tcg: Decode the operand to INDEX_op_mb in dumps, Richard Henderson, 2023/03/05
- [PULL 14/84] target/alpha: Drop tcg_temp_free, Richard Henderson, 2023/03/05
- [PULL 19/84] target/arm: Drop new_tmp_a64, Richard Henderson, 2023/03/05
- [PULL 22/84] target/arm: Drop tcg_temp_free from translator-m-nocp.c, Richard Henderson, 2023/03/05