From: "Philippe Mathieu-Daudé" <philmd@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>, qemu-devel@nongnu.org
Cc: pierrick.bouvier@linaro.org, Paolo Bonzini <pbonzini@redhat.com>
Subject: Re: [PATCH v2 34/81] tcg/i386: Fold the ext{8,16,32}[us] cases into {s}extract
Date: Wed, 15 Jan 2025 22:56:59 +0100 [thread overview]
Message-ID: <4554869f-2daf-4a3d-bcdb-eeb66f9953eb@linaro.org> (raw)
In-Reply-To: <20250107080112.1175095-35-richard.henderson@linaro.org>
On 7/1/25 09:00, Richard Henderson wrote:
> Accept byte and word extensions with the extract opcodes.
> This is preparatory to removing the specialized extracts.
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> tcg/i386/tcg-target-has.h | 49 +++++++++++++++++++++++++++----
> tcg/tcg-has.h | 12 +++++---
> tcg/optimize.c | 8 +++--
> tcg/tcg-op.c | 12 +++-----
> tcg/i386/tcg-target.c.inc | 62 +++++++++++++++++++++++++++++----------
> 5 files changed, 107 insertions(+), 36 deletions(-)
>
> diff --git a/tcg/i386/tcg-target-has.h b/tcg/i386/tcg-target-has.h
> index 3ea2eab807..ad69f957a7 100644
> --- a/tcg/i386/tcg-target-has.h
> +++ b/tcg/i386/tcg-target-has.h
> @@ -80,7 +80,7 @@
> #define TCG_TARGET_HAS_ctpop_i64 have_popcnt
> #define TCG_TARGET_HAS_deposit_i64 1
> #define TCG_TARGET_HAS_extract_i64 1
> -#define TCG_TARGET_HAS_sextract_i64 0
> +#define TCG_TARGET_HAS_sextract_i64 1
> #define TCG_TARGET_HAS_extract2_i64 1
> #define TCG_TARGET_HAS_negsetcond_i64 1
> #define TCG_TARGET_HAS_add2_i64 1
> @@ -130,10 +130,47 @@
> (TCG_TARGET_REG_BITS == 32 && (ofs) == 8 && (len) == 8))
> #define TCG_TARGET_deposit_i64_valid TCG_TARGET_deposit_i32_valid
>
> -/* Check for the possibility of high-byte extraction and, for 64-bit,
> - zero-extending 32-bit right-shift. */
> -#define TCG_TARGET_extract_i32_valid(ofs, len) ((ofs) == 8 && (len) == 8)
> -#define TCG_TARGET_extract_i64_valid(ofs, len) \
> - (((ofs) == 8 && (len) == 8) || ((ofs) + (len)) == 32)
> +/*
> + * Check for the possibility of low byte/word extraction, high-byte extraction
> + * and zero-extending 32-bit right-shift.
> + *
> + * We cannot sign-extend from high byte to 64-bits without using the
> + * REX prefix that explicitly excludes access to the high-byte registers.
> + */
> +static inline bool
> +tcg_target_sextract_valid(TCGType type, unsigned ofs, unsigned len)
> +{
> + switch (ofs) {
> + case 0:
> + switch (len) {
> + case 8:
> + case 16:
> + return true;
> + case 32:
> + return type == TCG_TYPE_I64;
> + }
> + return false;
> + case 8:
> + return len == 8 && type == TCG_TYPE_I32;
> + }
> + return false;
> +}
> +#define TCG_TARGET_sextract_valid tcg_target_sextract_valid
> +
> +static inline bool
> +tcg_target_extract_valid(TCGType type, unsigned ofs, unsigned len)
> +{
> + if (type == TCG_TYPE_I64 && ofs + len == 32) {
> + return true;
> + }
> + switch (ofs) {
> + case 0:
> + return len == 8 || len == 16;
> + case 8:
> + return len == 8;
> + }
> + return false;
> +}
> +#define TCG_TARGET_extract_valid tcg_target_extract_valid
>
> #endif
> diff --git a/tcg/tcg-has.h b/tcg/tcg-has.h
> index 65b6a0b0cf..8ed35be8c3 100644
> --- a/tcg/tcg-has.h
> +++ b/tcg/tcg-has.h
> @@ -56,11 +56,15 @@
> #ifndef TCG_TARGET_deposit_i64_valid
> #define TCG_TARGET_deposit_i64_valid(ofs, len) 1
> #endif
> -#ifndef TCG_TARGET_extract_i32_valid
> -#define TCG_TARGET_extract_i32_valid(ofs, len) 1
> +#ifndef TCG_TARGET_extract_valid
> +#define TCG_TARGET_extract_valid(type, ofs, len) \
> + ((type) == TCG_TYPE_I32 ? TCG_TARGET_HAS_extract_i32 \
> + : TCG_TARGET_HAS_extract_i64)
> #endif
> -#ifndef TCG_TARGET_extract_i64_valid
> -#define TCG_TARGET_extract_i64_valid(ofs, len) 1
> +#ifndef TCG_TARGET_sextract_valid
> +#define TCG_TARGET_sextract_valid(type, ofs, len) \
> + ((type) == TCG_TYPE_I32 ? TCG_TARGET_HAS_sextract_i32 \
> + : TCG_TARGET_HAS_sextract_i64)
> #endif
>
> /* Only one of DIV or DIV2 should be defined. */
> diff --git a/tcg/optimize.c b/tcg/optimize.c
> index c363c5c04b..cd8ad712c4 100644
> --- a/tcg/optimize.c
> +++ b/tcg/optimize.c
> @@ -2362,8 +2362,10 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
> xor_opc = INDEX_op_xor_i32;
> shr_opc = INDEX_op_shr_i32;
> neg_opc = INDEX_op_neg_i32;
> - if (TCG_TARGET_extract_i32_valid(sh, 1)) {
> + if (TCG_TARGET_extract_valid(TCG_TYPE_I32, sh, 1)) {
> uext_opc = TCG_TARGET_HAS_extract_i32 ? INDEX_op_extract_i32 : 0;
> + }
> + if (TCG_TARGET_sextract_valid(TCG_TYPE_I32, sh, 1)) {
> sext_opc = TCG_TARGET_HAS_sextract_i32 ? INDEX_op_sextract_i32 : 0;
> }
> break;
> @@ -2373,8 +2375,10 @@ static void fold_setcond_tst_pow2(OptContext *ctx, TCGOp *op, bool neg)
> xor_opc = INDEX_op_xor_i64;
> shr_opc = INDEX_op_shr_i64;
> neg_opc = INDEX_op_neg_i64;
> - if (TCG_TARGET_extract_i64_valid(sh, 1)) {
> + if (TCG_TARGET_extract_valid(TCG_TYPE_I64, sh, 1)) {
> uext_opc = TCG_TARGET_HAS_extract_i64 ? INDEX_op_extract_i64 : 0;
> + }
> + if (TCG_TARGET_sextract_valid(TCG_TYPE_I64, sh, 1)) {
> sext_opc = TCG_TARGET_HAS_sextract_i64 ? INDEX_op_sextract_i64 : 0;
> }
> break;
> diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
> index ab5ccd8dcb..d813a7f44e 100644
> --- a/tcg/tcg-op.c
> +++ b/tcg/tcg-op.c
> @@ -1014,8 +1014,7 @@ void tcg_gen_extract_i32(TCGv_i32 ret, TCGv_i32 arg,
> return;
> }
>
> - if (TCG_TARGET_HAS_extract_i32
> - && TCG_TARGET_extract_i32_valid(ofs, len)) {
> + if (TCG_TARGET_extract_valid(TCG_TYPE_I32, ofs, len)) {
> tcg_gen_op4ii_i32(INDEX_op_extract_i32, ret, arg, ofs, len);
> return;
> }
> @@ -1077,8 +1076,7 @@ void tcg_gen_sextract_i32(TCGv_i32 ret, TCGv_i32 arg,
> }
> }
>
> - if (TCG_TARGET_HAS_sextract_i32
> - && TCG_TARGET_extract_i32_valid(ofs, len)) {
> + if (TCG_TARGET_sextract_valid(TCG_TYPE_I32, ofs, len)) {
> tcg_gen_op4ii_i32(INDEX_op_sextract_i32, ret, arg, ofs, len);
> return;
> }
> @@ -2811,8 +2809,7 @@ void tcg_gen_extract_i64(TCGv_i64 ret, TCGv_i64 arg,
> goto do_shift_and;
> }
>
> - if (TCG_TARGET_HAS_extract_i64
> - && TCG_TARGET_extract_i64_valid(ofs, len)) {
> + if (TCG_TARGET_extract_valid(TCG_TYPE_I64, ofs, len)) {
> tcg_gen_op4ii_i64(INDEX_op_extract_i64, ret, arg, ofs, len);
> return;
> }
> @@ -2917,8 +2914,7 @@ void tcg_gen_sextract_i64(TCGv_i64 ret, TCGv_i64 arg,
> return;
> }
>
> - if (TCG_TARGET_HAS_sextract_i64
> - && TCG_TARGET_extract_i64_valid(ofs, len)) {
> + if (TCG_TARGET_sextract_valid(TCG_TYPE_I64, ofs, len)) {
> tcg_gen_op4ii_i64(INDEX_op_sextract_i64, ret, arg, ofs, len);
> return;
> }
> diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
> index 047c5da81c..afff56956f 100644
> --- a/tcg/i386/tcg-target.c.inc
> +++ b/tcg/i386/tcg-target.c.inc
> @@ -3036,6 +3036,10 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
>
> case INDEX_op_extract_i64:
> if (a2 + args[3] == 32) {
> + if (a2 == 0) {
> + tcg_out_ext32u(s, a0, a1);
> + break;
> + }
> /* This is a 32-bit zero-extending right shift. */
> tcg_out_mov(s, TCG_TYPE_I32, a0, a1);
> tcg_out_shifti(s, SHIFT_SHR, a0, a2);
> @@ -3043,28 +3047,53 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
> }
> /* FALLTHRU */
> case INDEX_op_extract_i32:
> - /* On the off-chance that we can use the high-byte registers.
> - Otherwise we emit the same ext16 + shift pattern that we
> - would have gotten from the normal tcg-op.c expansion. */
> - tcg_debug_assert(a2 == 8 && args[3] == 8);
> - if (a1 < 4 && a0 < 8) {
> - tcg_out_modrm(s, OPC_MOVZBL, a0, a1 + 4);
> - } else {
> + if (a2 == 0 && args[3] == 8) {
> + tcg_out_ext8u(s, a0, a1);
> + } else if (a2 == 0 && args[3] == 16) {
> tcg_out_ext16u(s, a0, a1);
> - tcg_out_shifti(s, SHIFT_SHR, a0, 8);
> + } else if (a2 == 8 && args[3] == 8) {
> + /*
> + * On the off-chance that we can use the high-byte registers.
> + * Otherwise we emit the same ext16 + shift pattern that we
> + * would have gotten from the normal tcg-op.c expansion.
> + */
> + if (a1 < 4 && a0 < 8) {
> + tcg_out_modrm(s, OPC_MOVZBL, a0, a1 + 4);
> + } else {
> + tcg_out_ext16u(s, a0, a1);
> + tcg_out_shifti(s, SHIFT_SHR, a0, 8);
> + }
> + } else {
> + g_assert_not_reached();
> + }
> + break;
> +
> + case INDEX_op_sextract_i64:
> + if (a2 == 0 && args[3] == 8) {
> + tcg_out_ext8s(s, TCG_TYPE_I64, a0, a1);
> + } else if (a2 == 0 && args[3] == 16) {
> + tcg_out_ext16s(s, TCG_TYPE_I64, a0, a1);
> + } else if (a2 == 0 && args[3] == 32) {
> + tcg_out_ext32s(s, a0, a1);
> + } else {
> + g_assert_not_reached();
> }
> break;
>
> case INDEX_op_sextract_i32:
> - /* We don't implement sextract_i64, as we cannot sign-extend to
> - 64-bits without using the REX prefix that explicitly excludes
> - access to the high-byte registers. */
> - tcg_debug_assert(a2 == 8 && args[3] == 8);
> - if (a1 < 4 && a0 < 8) {
> - tcg_out_modrm(s, OPC_MOVSBL, a0, a1 + 4);
> - } else {
> + if (a2 == 0 && args[3] == 8) {
> + tcg_out_ext8s(s, TCG_TYPE_I32, a0, a1);
> + } else if (a2 == 0 && args[3] == 16) {
> tcg_out_ext16s(s, TCG_TYPE_I32, a0, a1);
> - tcg_out_shifti(s, SHIFT_SAR, a0, 8);
> + } else if (a2 == 8 && args[3] == 8) {
> + if (a1 < 4 && a0 < 8) {
> + tcg_out_modrm(s, OPC_MOVSBL, a0, a1 + 4);
> + } else {
> + tcg_out_ext16s(s, TCG_TYPE_I32, a0, a1);
> + tcg_out_shifti(s, SHIFT_SAR, a0, 8);
> + }
> + } else {
> + g_assert_not_reached();
> }
> break;
>
> @@ -3747,6 +3776,7 @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
> case INDEX_op_extract_i32:
> case INDEX_op_extract_i64:
> case INDEX_op_sextract_i32:
> + case INDEX_op_sextract_i64:
> case INDEX_op_ctpop_i32:
> case INDEX_op_ctpop_i64:
> return C_O1_I1(r, r);
To the best of my knowledge,
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
next prev parent reply other threads:[~2025-01-15 21:57 UTC|newest]
Thread overview: 164+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-07 7:59 [RFC PATCH v2 00/81] tcg: Merge *_i32 and *_i64 opcodes Richard Henderson
2025-01-07 7:59 ` [PATCH v2 01/81] tcg: Move call abi parameters from tcg-target.h to tcg-target.c.inc Richard Henderson
2025-01-17 21:26 ` Alex Bennée
2025-01-07 7:59 ` [PATCH v2 02/81] tcg: Replace TCGOP_VECL with TCGOP_TYPE Richard Henderson
2025-01-08 17:39 ` Philippe Mathieu-Daudé
2025-01-08 21:23 ` Richard Henderson
2025-01-15 20:00 ` Philippe Mathieu-Daudé
2025-01-07 7:59 ` [PATCH v2 03/81] tcg: Move tcg_op_insert_{after, before} decls to tcg-internal.h Richard Henderson
2025-01-07 8:55 ` Philippe Mathieu-Daudé
2025-01-17 21:29 ` Alex Bennée
2025-01-07 7:59 ` [PATCH v2 04/81] tcg: Copy TCGOP_TYPE in tcg_op_insert_{after, before} Richard Henderson
2025-01-08 17:39 ` [PATCH v2 04/81] tcg: Copy TCGOP_TYPE in tcg_op_insert_{after,before} Philippe Mathieu-Daudé
2025-01-07 7:59 ` [PATCH v2 05/81] tcg: Add TCGOP_FLAGS Richard Henderson
2025-01-15 21:16 ` Philippe Mathieu-Daudé
2025-01-15 23:40 ` Richard Henderson
2025-01-07 7:59 ` [PATCH v2 06/81] tcg: Add type and flags arguments to tcg_op_supported Richard Henderson
2025-01-14 16:59 ` Philippe Mathieu-Daudé
2025-01-07 7:59 ` [PATCH v2 07/81] target/arm: Do not test TCG_TARGET_HAS_bitsel_vec Richard Henderson
2025-01-08 17:46 ` Philippe Mathieu-Daudé
2025-01-08 21:38 ` Richard Henderson
2025-01-08 22:14 ` Philippe Mathieu-Daudé
2025-01-08 22:30 ` Richard Henderson
2025-01-09 11:32 ` Philippe Mathieu-Daudé
2025-01-07 7:59 ` [PATCH v2 08/81] target/arm: Use tcg_op_supported Richard Henderson
2025-01-07 8:00 ` [PATCH v2 09/81] target/tricore: " Richard Henderson
2025-01-07 8:00 ` [PATCH v2 10/81] tcg: Add tcg_op_deposit_valid Richard Henderson
2025-01-07 8:00 ` [PATCH v2 11/81] target/i386: Remove TCG_TARGET_extract_tl_valid Richard Henderson
2025-01-07 8:00 ` [PATCH v2 12/81] target/i386: Use tcg_op_deposit_valid Richard Henderson
2025-01-07 8:00 ` [PATCH v2 13/81] target/i386: Use tcg_op_supported Richard Henderson
2025-01-07 8:00 ` [PATCH v2 14/81] tcg: Remove TCG_TARGET_NEED_LDST_LABELS and TCG_TARGET_NEED_POOL_LABELS Richard Henderson
2025-01-15 19:57 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 15/81] tcg: Rename tcg-target.opc.h to tcg-target-opc.h.inc Richard Henderson
2025-01-07 8:00 ` [PATCH v2 16/81] tcg/tci: Move TCI specific opcodes " Richard Henderson
2025-01-07 8:00 ` [PATCH v2 17/81] tcg: Move fallback tcg_can_emit_vec_op out of line Richard Henderson
2025-01-07 8:00 ` [PATCH v2 18/81] tcg: Split out tcg-target-has.h and tcg-has.h Richard Henderson
2025-01-08 21:51 ` [PATCH v3 00/14] " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 01/14] tcg/ppc: Remove TCGPowerISA enum Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 02/14] tcg: Extract default TCG_TARGET_HAS_foo definitions to 'tcg-has.h' Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 03/14] tcg/aarch64: Extract TCG_TARGET_HAS_foo defs to 'tcg-target-has.h' Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 04/14] tcg/arm: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 05/14] tcg/i386: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 06/14] tcg/loongarch64: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 07/14] tcg/mips: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 08/14] tcg/ppc: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 09/14] tcg/riscv: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 10/14] tcg/s390x: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 11/14] tcg/sparc64: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 12/14] tcg/tci: " Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 13/14] tcg: Include 'tcg-target-has.h' once in 'tcg-has.h' Philippe Mathieu-Daudé
2025-01-08 21:51 ` [PATCH v3 14/14] tcg: Only include 'tcg-has.h' when necessary Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 19/81] tcg: Split out tcg-target-mo.h Richard Henderson
2025-01-07 8:00 ` [PATCH v2 20/81] tcg: Use C_NotImplemented in tcg_target_op_def Richard Henderson
2025-01-07 8:00 ` [PATCH v2 21/81] tcg: Change have_vec to has_type in tcg_op_supported Richard Henderson
2025-01-07 8:00 ` [PATCH v2 22/81] tcg: Reorg process_op_defs Richard Henderson
2025-01-14 17:48 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 23/81] tcg: Remove args_ct from TCGOpDef Richard Henderson
2025-01-14 16:57 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 24/81] tcg: Constify tcg_op_defs Richard Henderson
2025-01-14 16:57 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 25/81] tcg: Validate op supported in opcode_args_ct Richard Henderson
2025-01-14 16:57 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 26/81] tcg: Add TCG_OPF_NOT_PRESENT to opcodes without inputs or outputs Richard Henderson
2025-01-08 21:58 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 27/81] tcg: Pass type and flags to tcg_target_op_def Richard Henderson
2025-01-14 16:58 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 28/81] tcg: Add TCGType argument to tcg_out_op Richard Henderson
2025-01-08 22:05 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 29/81] tcg: Remove TCG_OPF_64BIT Richard Henderson
2025-01-08 22:06 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 30/81] tcg: Drop implementation checks from tcg-opc.h Richard Henderson
2025-01-14 17:00 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 31/81] tcg: Replace IMPLVEC with TCG_OPF_VECTOR Richard Henderson
2025-01-15 19:59 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 32/81] tcg/mips: Expand bswap unconditionally Richard Henderson
2025-01-15 22:02 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 33/81] tcg/i386: Handle all 8-bit extensions for i686 Richard Henderson
2025-01-15 20:13 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 34/81] tcg/i386: Fold the ext{8, 16, 32}[us] cases into {s}extract Richard Henderson
2025-01-15 21:56 ` Philippe Mathieu-Daudé [this message]
2025-01-07 8:00 ` [PATCH v2 35/81] tcg/aarch64: Provide TCG_TARGET_{s}extract_valid Richard Henderson
2025-01-09 23:03 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 36/81] tcg/aarch64: Expand extract with offset 0 with andi Richard Henderson
2025-01-09 23:33 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 37/81] tcg/arm: Add full [US]XT[BH] into {s}extract Richard Henderson
2025-01-09 22:57 ` Philippe Mathieu-Daudé
2025-01-15 20:06 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 38/81] tcg/loongarch64: Fold the ext{8, 16, 32}[us] cases " Richard Henderson
2025-01-09 23:40 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 39/81] tcg/mips: " Richard Henderson
2025-01-09 22:43 ` [PATCH v2 39/81] tcg/mips: Fold the ext{8,16,32}[us] " Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 40/81] tcg/ppc: Fold the ext{8, 16, 32}[us] " Richard Henderson
2025-01-09 22:52 ` [PATCH v2 40/81] tcg/ppc: Fold the ext{8,16,32}[us] " Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 41/81] tcg/riscv64: Fold the ext{8, 16, 32}[us] " Richard Henderson
2025-01-09 23:36 ` [PATCH v2 41/81] tcg/riscv64: Fold the ext{8,16,32}[us] " Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 42/81] tcg/riscv: Use SRAIW, SRLIW for {s}extract_i64 Richard Henderson
2025-01-15 20:09 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 43/81] tcg/s390x: Fold the ext{8, 16, 32}[us] cases into {s}extract Richard Henderson
2025-01-09 22:54 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 44/81] tcg/sparc64: Use SRA, SRL for {s}extract_i64 Richard Henderson
2025-01-09 23:00 ` Philippe Mathieu-Daudé
2025-01-09 23:44 ` Philippe Mathieu-Daudé
2025-01-09 23:45 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 45/81] tcg/tci: Provide TCG_TARGET_{s}extract_valid Richard Henderson
2025-01-09 23:03 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 46/81] tcg/tci: Remove assertions for deposit and extract Richard Henderson
2025-01-15 20:15 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 47/81] tcg: Remove TCG_TARGET_HAS_{s}extract_{i32,i64} Richard Henderson
2025-01-15 20:16 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 48/81] tcg: Remove TCG_TARGET_HAS_deposit_{i32,i64} Richard Henderson
2025-01-15 20:19 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 49/81] tcg: Remove INDEX_op_ext{8,16,32}* Richard Henderson
2025-01-07 8:00 ` [PATCH v2 50/81] tcg: Add all_outop[] Richard Henderson
2025-01-09 23:21 ` Philippe Mathieu-Daudé
2025-01-10 14:51 ` Richard Henderson
2025-01-07 8:00 ` [PATCH v2 51/81] tcg: Merge INDEX_op_mov_{i32,i64} Richard Henderson
2025-01-07 8:00 ` [PATCH v2 52/81] tcg: Convert add to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 53/81] tcg: Merge INDEX_op_add_{i32,i64} Richard Henderson
2025-01-08 17:50 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 54/81] tcg: Convert and to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 55/81] tcg: Merge INDEX_op_and_{i32,i64} Richard Henderson
2025-01-08 17:53 ` Philippe Mathieu-Daudé
2025-01-08 21:40 ` Richard Henderson
2025-01-07 8:00 ` [PATCH v2 56/81] tcg/optimize: Fold andc with immediate to and Richard Henderson
2025-01-09 23:28 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 57/81] tcg/optimize: Emit add r, r, -1 in fold_setcond_tst_pow2 Richard Henderson
2025-01-09 22:32 ` [PATCH v2 57/81] tcg/optimize: Emit add r,r,-1 " Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 58/81] tcg: Convert andc to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 59/81] tcg: Merge INDEX_op_andc_{i32,i64} Richard Henderson
2025-01-08 20:58 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 60/81] tcg: Convert or to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 61/81] tcg: Merge INDEX_op_or_{i32,i64} Richard Henderson
2025-01-08 20:58 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 62/81] tcg/optimize: Fold orc with immediate to or Richard Henderson
2025-01-09 23:25 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 63/81] tcg: Convert orc to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 64/81] tcg: Merge INDEX_op_orc_{i32,i64} Richard Henderson
2025-01-08 20:59 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 65/81] tcg: Convert xor to TCGOutOpBinary Richard Henderson
2025-01-07 8:00 ` [PATCH v2 66/81] tcg: Merge INDEX_op_xor_{i32,i64} Richard Henderson
2025-01-08 21:00 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 67/81] tcg/optimize: Fold eqv with immediate to xor Richard Henderson
2025-01-09 23:27 ` Philippe Mathieu-Daudé
2025-01-07 8:00 ` [PATCH v2 68/81] tcg: Convert eqv to TCGOutOpBinary Richard Henderson
2025-01-07 8:01 ` [PATCH v2 69/81] tcg: Merge INDEX_op_eqv_{i32,i64} Richard Henderson
2025-01-08 21:01 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 70/81] tcg: Convert nand to TCGOutOpBinary Richard Henderson
2025-01-07 8:01 ` [PATCH v2 71/81] tcg: Merge INDEX_op_nand_{i32,i64} Richard Henderson
2025-01-08 21:01 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 72/81] tcg/loongarch64: Do not accept constant argument to nor Richard Henderson
2025-01-15 20:22 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 73/81] tcg: Convert nor to TCGOutOpBinary Richard Henderson
2025-01-07 8:01 ` [PATCH v2 74/81] tcg: Merge INDEX_op_nor_{i32,i64} Richard Henderson
2025-01-08 21:01 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 75/81] tcg/arm: Fix constraints for sub Richard Henderson
2025-01-07 8:01 ` [PATCH v2 76/81] tcg: Convert sub to TCGOutOpSubtract Richard Henderson
2025-01-07 8:01 ` [PATCH v2 77/81] tcg: Merge INDEX_op_sub_{i32,i64} Richard Henderson
2025-01-08 21:02 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 78/81] tcg: Convert neg to TCGOutOpUnary Richard Henderson
2025-01-07 8:01 ` [PATCH v2 79/81] tcg: Merge INDEX_op_neg_{i32,i64} Richard Henderson
2025-01-08 22:17 ` Philippe Mathieu-Daudé
2025-01-07 8:01 ` [PATCH v2 80/81] tcg: Convert not to TCGOutOpUnary Richard Henderson
2025-01-07 8:01 ` [PATCH v2 81/81] tcg: Merge INDEX_op_not_{i32,i64} Richard Henderson
2025-01-08 21:04 ` Philippe Mathieu-Daudé
2025-01-14 17:55 ` [RFC PATCH v2 00/81] tcg: Merge *_i32 and *_i64 opcodes Philippe Mathieu-Daudé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4554869f-2daf-4a3d-bcdb-eeb66f9953eb@linaro.org \
--to=philmd@linaro.org \
--cc=pbonzini@redhat.com \
--cc=pierrick.bouvier@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).