[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/27] meson: Split test for __int128_t type from __int128_t arith
|
From: |
Richard Henderson |
|
Subject: |
[PULL 03/27] meson: Split test for __int128_t type from __int128_t arithmetic |
|
Date: |
Tue, 30 May 2023 11:59:25 -0700 |
Older versions of clang have missing runtime functions for arithmetic
with -fsanitize=undefined (see 464e3671f9d5c), so we cannot use
__int128_t for implementing Int128. But __int128_t is present,
data movement works, and it can be used for atomic128.
Probe for both CONFIG_INT128_TYPE and CONFIG_INT128, adjust
qemu/int128.h to define Int128Alias if CONFIG_INT128_TYPE,
and adjust the meson probe for atomics to use has_int128_type.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
meson.build | 15 ++++++++++-----
include/qemu/int128.h | 4 ++--
2 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 2d48aa1e2e..bc76ea96bf 100644
--- a/meson.build
+++ b/meson.build
@@ -2543,7 +2543,13 @@ config_host_data.set('CONFIG_ATOMIC64', cc.links('''
return 0;
}'''))
-has_int128 = cc.links('''
+has_int128_type = cc.compiles('''
+ __int128_t a;
+ __uint128_t b;
+ int main(void) { b = a; }''')
+config_host_data.set('CONFIG_INT128_TYPE', has_int128_type)
+
+has_int128 = has_int128_type and cc.links('''
__int128_t a;
__uint128_t b;
int main (void) {
@@ -2552,10 +2558,9 @@ has_int128 = cc.links('''
a = a * a;
return 0;
}''')
-
config_host_data.set('CONFIG_INT128', has_int128)
-if has_int128
+if has_int128_type
# "do we have 128-bit atomics which are handled inline and specifically not
# via libatomic". The reason we can't use libatomic is documented in the
# comment starting "GCC is a house divided" in include/qemu/atomic128.h.
@@ -2564,7 +2569,7 @@ if has_int128
# __alignof(unsigned __int128) for the host.
atomic_test_128 = '''
int main(int ac, char **av) {
- unsigned __int128 *p = __builtin_assume_aligned(av[ac - 1], 16);
+ __uint128_t *p = __builtin_assume_aligned(av[ac - 1], 16);
p[1] = __atomic_load_n(&p[0], __ATOMIC_RELAXED);
__atomic_store_n(&p[2], p[3], __ATOMIC_RELAXED);
__atomic_compare_exchange_n(&p[4], &p[5], p[6], 0, __ATOMIC_RELAXED,
__ATOMIC_RELAXED);
@@ -2586,7 +2591,7 @@ if has_int128
config_host_data.set('CONFIG_CMPXCHG128', cc.links('''
int main(void)
{
- unsigned __int128 x = 0, y = 0;
+ __uint128_t x = 0, y = 0;
__sync_val_compare_and_swap_16(&x, y, x);
return 0;
}
diff --git a/include/qemu/int128.h b/include/qemu/int128.h
index 9e46cfaefc..73624e8be7 100644
--- a/include/qemu/int128.h
+++ b/include/qemu/int128.h
@@ -481,7 +481,7 @@ static inline void bswap128s(Int128 *s)
* a possible structure and the native types. Ease parameter passing
* via use of the transparent union extension.
*/
-#ifdef CONFIG_INT128
+#ifdef CONFIG_INT128_TYPE
typedef union {
__uint128_t u;
__int128_t i;
@@ -489,6 +489,6 @@ typedef union {
} Int128Alias __attribute__((transparent_union));
#else
typedef Int128 Int128Alias;
-#endif /* CONFIG_INT128 */
+#endif /* CONFIG_INT128_TYPE */
#endif /* INT128_H */
--
2.34.1
- [PULL 00/27] tcg patch queue, Richard Henderson, 2023/05/30
- [PULL 01/27] tcg: Fix register move type in tcg_out_ld_helper_ret, Richard Henderson, 2023/05/30
- [PULL 06/27] tcg/aarch64: Rename temporaries, Richard Henderson, 2023/05/30
- [PULL 03/27] meson: Split test for __int128_t type from __int128_t arithmetic,
Richard Henderson <=
- [PULL 02/27] accel/tcg: Fix check for page writeability in load_atomic16_or_exit, Richard Henderson, 2023/05/30
- [PULL 04/27] qemu/atomic128: Add x86_64 atomic128-ldst.h, Richard Henderson, 2023/05/30
- [PULL 14/27] accel/tcg: Add x86_64 load_atom_extract_al16_or_al8, Richard Henderson, 2023/05/30
- [PULL 17/27] tcg: Remove TCG_TARGET_TLB_DISPLACEMENT_BITS, Richard Henderson, 2023/05/30
- [PULL 21/27] decodetree: Do not remove output_file from /dev, Richard Henderson, 2023/05/30
- [PULL 22/27] tests/decode: Convert tests to meson, Richard Henderson, 2023/05/30
- [PULL 24/27] scripts/decodetree: Pass lvalue-formatter function to str_extract(), Richard Henderson, 2023/05/30
- [PULL 13/27] accel/tcg: Extract store_atom_insert_al16 to host header, Richard Henderson, 2023/05/30
- [PULL 18/27] decodetree: Add --test-for-error, Richard Henderson, 2023/05/30
- [PULL 15/27] accel/tcg: Add aarch64 lse2 load_atom_extract_al16_or_al8, Richard Henderson, 2023/05/30