All of lore.kernel.org
 help / color / mirror / Atom feed
From: Claudio Fontana <claudio.fontana@huawei.com>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v3 14/29] tcg-aarch64: Support movcond
Date: Mon, 9 Sep 2013 17:09:23 +0200	[thread overview]
Message-ID: <522DE4A3.8050404@huawei.com> (raw)
In-Reply-To: <1378144503-15808-15-git-send-email-rth@twiddle.net>

On 02.09.2013 19:54, Richard Henderson wrote:
> Also tidy the implementation of setcond in order to share code.
> 
> Signed-off-by: Richard Henderson <rth@twiddle.net>
> ---
>  tcg/aarch64/tcg-target.c | 33 +++++++++++++++++++++++++--------
>  tcg/aarch64/tcg-target.h |  4 ++--
>  2 files changed, 27 insertions(+), 10 deletions(-)
> 
> diff --git a/tcg/aarch64/tcg-target.c b/tcg/aarch64/tcg-target.c
> index ea1db85..322660d 100644
> --- a/tcg/aarch64/tcg-target.c
> +++ b/tcg/aarch64/tcg-target.c
> @@ -284,6 +284,10 @@ typedef enum {
>      INSN_LSRV  = 0x1ac02400,
>      INSN_ASRV  = 0x1ac02800,
>      INSN_RORV  = 0x1ac02c00,
> +
> +    /* Conditional select instructions */
> +    INSN_CSEL  = 0x1a800000,
> +    INSN_CSINC = 0x1a800400,
>  } AArch64Insn;
>  
>  static inline enum aarch64_ldst_op_data
> @@ -435,6 +439,14 @@ static void tcg_fmt_Rdn_limm(TCGContext *s, AArch64Insn insn, bool ext,
>      tcg_fmt_Rdn_r_s(s, insn, ext, rd, rn, r, c);
>  }
>  
> +static inline void tcg_fmt_Rdnm_cond(TCGContext *s, AArch64Insn insn,
> +                                     bool ext, TCGReg rd, TCGReg rn,
> +                                     TCGReg rm, TCGCond c)
> +{
> +    tcg_out32(s, insn | ext << 31 | rm << 16 | rn << 5 | rd
> +              | tcg_cond_to_aarch64[c] << 12);
> +}
> +
>  static inline void tcg_out_ldst_9(TCGContext *s,
>                                    enum aarch64_ldst_op_data op_data,
>                                    enum aarch64_ldst_op_type op_type,
> @@ -661,13 +673,6 @@ static void tcg_out_cmp(TCGContext *s, bool ext, TCGReg a,
>      }
>  }
>  
> -static inline void tcg_out_cset(TCGContext *s, bool ext, TCGReg rd, TCGCond c)
> -{
> -    /* Using CSET alias of CSINC 0x1a800400 Xd, XZR, XZR, invert(cond) */
> -    unsigned int base = ext ? 0x9a9f07e0 : 0x1a9f07e0;
> -    tcg_out32(s, base | tcg_cond_to_aarch64[tcg_invert_cond(c)] << 12 | rd);
> -}
> -
>  static inline void tcg_out_goto(TCGContext *s, tcg_target_long target)
>  {
>      tcg_target_long offset;
> @@ -1394,7 +1399,17 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc,
>          /* FALLTHRU */
>      case INDEX_op_setcond_i64:
>          tcg_out_cmp(s, ext, a1, a2, c2);
> -        tcg_out_cset(s, 0, a0, args[3]);
> +        /* Using CSET alias of CSINC Xd, XZR, XZR, invert(cond) */
> +        tcg_fmt_Rdnm_cond(s, INSN_CSINC, 0, a0, TCG_REG_XZR,
> +                          TCG_REG_XZR, tcg_invert_cond(args[3]));
> +        break;
> +
> +    case INDEX_op_movcond_i32:
> +        a2 = (int32_t)a2;
> +        /* FALLTHRU */
> +    case INDEX_op_movcond_i64:
> +        tcg_out_cmp(s, ext, a1, a2, c2);
> +        tcg_fmt_Rdnm_cond(s, INSN_CSEL, ext, a0, REG0(3), REG0(4), args[5]);
>          break;
>  
>      case INDEX_op_qemu_ld8u:
> @@ -1553,6 +1568,8 @@ static const TCGTargetOpDef aarch64_op_defs[] = {
>      { INDEX_op_brcond_i64, { "r", "rA" } },
>      { INDEX_op_setcond_i32, { "r", "r", "rwA" } },
>      { INDEX_op_setcond_i64, { "r", "r", "rA" } },
> +    { INDEX_op_movcond_i32, { "r", "r", "rwA", "rZ", "rZ" } },
> +    { INDEX_op_movcond_i64, { "r", "r", "rwA", "rZ", "rZ" } },
>  
>      { INDEX_op_qemu_ld8u, { "r", "l" } },
>      { INDEX_op_qemu_ld8s, { "r", "l" } },
> diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h
> index 6242136..ff073ca 100644
> --- a/tcg/aarch64/tcg-target.h
> +++ b/tcg/aarch64/tcg-target.h
> @@ -56,7 +56,7 @@ typedef enum {
>  #define TCG_TARGET_HAS_nand_i32         0
>  #define TCG_TARGET_HAS_nor_i32          0
>  #define TCG_TARGET_HAS_deposit_i32      0
> -#define TCG_TARGET_HAS_movcond_i32      0
> +#define TCG_TARGET_HAS_movcond_i32      1
>  #define TCG_TARGET_HAS_add2_i32         0
>  #define TCG_TARGET_HAS_sub2_i32         0
>  #define TCG_TARGET_HAS_mulu2_i32        0
> @@ -84,7 +84,7 @@ typedef enum {
>  #define TCG_TARGET_HAS_nand_i64         0
>  #define TCG_TARGET_HAS_nor_i64          0
>  #define TCG_TARGET_HAS_deposit_i64      0
> -#define TCG_TARGET_HAS_movcond_i64      0
> +#define TCG_TARGET_HAS_movcond_i64      1
>  #define TCG_TARGET_HAS_add2_i64         0
>  #define TCG_TARGET_HAS_sub2_i64         0
>  #define TCG_TARGET_HAS_mulu2_i64        0
> 

This breaks the x86-64 target.
Had you separated the additional operation from the cset change we would know which part is at fault.

  reply	other threads:[~2013-09-09 15:09 UTC|newest]

Thread overview: 58+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-02 17:54 [Qemu-devel] [PATCH v3 00/29] tcg-aarch64 improvements Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 01/29] tcg-aarch64: Set ext based on TCG_OPF_64BIT Richard Henderson
2013-09-12  8:25   ` Claudio Fontana
2013-09-12  8:58     ` Peter Maydell
2013-09-12  9:01       ` Claudio Fontana
2013-09-12 13:21       ` Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 02/29] tcg-aarch64: Change all ext variables to bool Richard Henderson
2013-09-12  8:29   ` Claudio Fontana
2013-09-12 13:45     ` Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 03/29] tcg-aarch64: Don't handle mov/movi in tcg_out_op Richard Henderson
2013-09-12  8:30   ` Claudio Fontana
2013-09-12 14:02     ` Richard Henderson
2013-09-12 14:31       ` Claudio Fontana
2013-09-12 14:35         ` Peter Maydell
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 04/29] tcg-aarch64: Hoist common argument loads " Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 05/29] tcg-aarch64: Change enum aarch64_arith_opc to AArch64Insn Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 06/29] tcg-aarch64: Merge enum aarch64_srr_opc with AArch64Insn Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 07/29] tcg-aarch64: Introduce tcg_fmt_* functions Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 08/29] tcg-aarch64: Introduce tcg_fmt_Rdn_aimm Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 09/29] tcg-aarch64: Implement mov with tcg_fmt_* functions Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 10/29] tcg-aarch64: Handle constant operands to add, sub, and compare Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 11/29] tcg-aarch64: Handle constant operands to and, or, xor Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 12/29] tcg-aarch64: Support andc, orc, eqv, not Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 13/29] tcg-aarch64: Handle zero as first argument to sub Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 14/29] tcg-aarch64: Support movcond Richard Henderson
2013-09-09 15:09   ` Claudio Fontana [this message]
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 15/29] tcg-aarch64: Support deposit Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 16/29] tcg-aarch64: Support add2, sub2 Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 17/29] tcg-aarch64: Support muluh, mulsh Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 18/29] tcg-aarch64: Support div, rem Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 19/29] tcg-aarch64: Introduce tcg_fmt_Rd_uimm_s Richard Henderson
2013-09-05 13:32   ` Claudio Fontana
2013-09-05 15:41     ` Richard Henderson
2013-09-06  9:06       ` Claudio Fontana
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 20/29] tcg-aarch64: Improve tcg_out_movi Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 21/29] tcg-aarch64: Avoid add with zero in tlb load Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 22/29] tcg-aarch64: Use adrp in tcg_out_movi Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 23/29] tcg-aarch64: Pass return address to load/store helpers directly Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 24/29] tcg-aarch64: Use tcg_out_call for qemu_ld/st Richard Henderson
2013-09-02 17:54 ` [Qemu-devel] [PATCH v3 25/29] tcg-aarch64: Use symbolic names for branches Richard Henderson
2013-09-02 17:55 ` [Qemu-devel] [PATCH v3 26/29] tcg-aarch64: Implement tcg_register_jit Richard Henderson
2013-09-02 17:55 ` [Qemu-devel] [PATCH v3 27/29] tcg-aarch64: Reuse FP and LR in translated code Richard Henderson
2013-09-02 17:55 ` [Qemu-devel] [PATCH v3 28/29] tcg-aarch64: Introduce tcg_out_ldst_pair Richard Henderson
2013-09-02 17:55 ` [Qemu-devel] [PATCH v3 29/29] tcg-aarch64: Remove redundant CPU_TLB_ENTRY_BITS check Richard Henderson
2013-09-03  7:37 ` [Qemu-devel] [PATCH v3 00/29] tcg-aarch64 improvements Richard W.M. Jones
2013-09-03  7:42   ` Laurent Desnogues
2013-09-03  8:00   ` Peter Maydell
2013-09-09  8:13 ` Claudio Fontana
2013-09-09 14:08   ` Richard Henderson
2013-09-09 15:02     ` Claudio Fontana
2013-09-09 15:04       ` Peter Maydell
2013-09-09 15:07       ` Richard Henderson
2013-09-10  8:27         ` Claudio Fontana
2013-09-10  8:45           ` Peter Maydell
2013-09-12  8:03             ` Claudio Fontana
2013-09-12  8:55               ` Peter Maydell
2013-09-10 13:16           ` Richard Henderson
2013-09-12  8:11             ` Claudio Fontana

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=522DE4A3.8050404@huawei.com \
    --to=claudio.fontana@huawei.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.