All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH v5 05/35] target/arm: Implement SVE integer convert to floating-point
Date: Wed, 27 Jun 2018 15:19:14 +0100	[thread overview]
Message-ID: <877emkwbvh.fsf@linaro.org> (raw)
In-Reply-To: <20180621015359.12018-6-richard.henderson@linaro.org>


Richard Henderson <richard.henderson@linaro.org> writes:

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

> ---
>  target/arm/helper-sve.h    | 30 +++++++++++++
>  target/arm/sve_helper.c    | 38 ++++++++++++++++
>  target/arm/translate-sve.c | 90 ++++++++++++++++++++++++++++++++++++++
>  target/arm/sve.decode      | 22 ++++++++++
>  4 files changed, 180 insertions(+)
>
> diff --git a/target/arm/helper-sve.h b/target/arm/helper-sve.h
> index b768128951..185112e1d2 100644
> --- a/target/arm/helper-sve.h
> +++ b/target/arm/helper-sve.h
> @@ -720,6 +720,36 @@ DEF_HELPER_FLAGS_5(gvec_rsqrts_s, TCG_CALL_NO_RWG,
>  DEF_HELPER_FLAGS_5(gvec_rsqrts_d, TCG_CALL_NO_RWG,
>                     void, ptr, ptr, ptr, ptr, i32)
>
> +DEF_HELPER_FLAGS_5(sve_scvt_hh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_sh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_dh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_ss, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_sd, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_ds, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_scvt_dd, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +
> +DEF_HELPER_FLAGS_5(sve_ucvt_hh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_sh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_dh, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_ss, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_sd, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_ds, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +DEF_HELPER_FLAGS_5(sve_ucvt_dd, TCG_CALL_NO_RWG,
> +                   void, ptr, ptr, ptr, ptr, i32)
> +
>  DEF_HELPER_FLAGS_4(sve_ld1bb_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32)
>  DEF_HELPER_FLAGS_4(sve_ld2bb_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32)
>  DEF_HELPER_FLAGS_4(sve_ld3bb_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32)
> diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c
> index f20774e240..a2f034820a 100644
> --- a/target/arm/sve_helper.c
> +++ b/target/arm/sve_helper.c
> @@ -2811,6 +2811,44 @@ uint32_t HELPER(sve_while)(void *vd, uint32_t count, uint32_t pred_desc)
>      return predtest_ones(d, oprsz, esz_mask);
>  }
>
> +/* Fully general two-operand expander, controlled by a predicate,
> + * With the extra float_status parameter.
> + */
> +#define DO_ZPZ_FP(NAME, TYPE, H, OP)                                  \
> +void HELPER(NAME)(void *vd, void *vn, void *vg, void *status, uint32_t desc) \
> +{                                                                     \
> +    intptr_t i = simd_oprsz(desc);                                    \
> +    uint64_t *g = vg;                                                 \
> +    do {                                                              \
> +        uint64_t pg = g[(i - 1) >> 6];                                \
> +        do {                                                          \
> +            i -= sizeof(TYPE);                                        \
> +            if (likely((pg >> (i & 63)) & 1)) {                       \
> +                TYPE nn = *(TYPE *)(vn + H(i));                       \
> +                *(TYPE *)(vd + H(i)) = OP(nn, status);                \
> +            }                                                         \
> +        } while (i & 63);                                             \
> +    } while (i != 0);                                                 \
> +}
> +
> +DO_ZPZ_FP(sve_scvt_hh, uint16_t, H1_2, int16_to_float16)
> +DO_ZPZ_FP(sve_scvt_sh, uint32_t, H1_4, int32_to_float16)
> +DO_ZPZ_FP(sve_scvt_ss, uint32_t, H1_4, int32_to_float32)
> +DO_ZPZ_FP(sve_scvt_sd, uint64_t,     , int32_to_float64)
> +DO_ZPZ_FP(sve_scvt_dh, uint64_t,     , int64_to_float16)
> +DO_ZPZ_FP(sve_scvt_ds, uint64_t,     , int64_to_float32)
> +DO_ZPZ_FP(sve_scvt_dd, uint64_t,     , int64_to_float64)
> +
> +DO_ZPZ_FP(sve_ucvt_hh, uint16_t, H1_2, uint16_to_float16)
> +DO_ZPZ_FP(sve_ucvt_sh, uint32_t, H1_4, uint32_to_float16)
> +DO_ZPZ_FP(sve_ucvt_ss, uint32_t, H1_4, uint32_to_float32)
> +DO_ZPZ_FP(sve_ucvt_sd, uint64_t,     , uint32_to_float64)
> +DO_ZPZ_FP(sve_ucvt_dh, uint64_t,     , uint64_to_float16)
> +DO_ZPZ_FP(sve_ucvt_ds, uint64_t,     , uint64_to_float32)
> +DO_ZPZ_FP(sve_ucvt_dd, uint64_t,     , uint64_to_float64)
> +
> +#undef DO_ZPZ_FP
> +
>  /*
>   * Load contiguous data, protected by a governing predicate.
>   */
> diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
> index 83de87ee0e..7639e589f5 100644
> --- a/target/arm/translate-sve.c
> +++ b/target/arm/translate-sve.c
> @@ -3425,6 +3425,96 @@ DO_FP3(FRSQRTS, rsqrts)
>
>  #undef DO_FP3
>
> +
> +/*
> + *** SVE Floating Point Unary Operations Prediated Group
> + */
> +
> +static bool do_zpz_ptr(DisasContext *s, int rd, int rn, int pg,
> +                       bool is_fp16, gen_helper_gvec_3_ptr *fn)
> +{
> +    if (sve_access_check(s)) {
> +        unsigned vsz = vec_full_reg_size(s);
> +        TCGv_ptr status = get_fpstatus_ptr(is_fp16);
> +        tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, rd),
> +                           vec_full_reg_offset(s, rn),
> +                           pred_full_reg_offset(s, pg),
> +                           status, vsz, vsz, 0, fn);
> +        tcg_temp_free_ptr(status);
> +    }
> +    return true;
> +}
> +
> +static bool trans_SCVTF_hh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_scvt_hh);
> +}
> +
> +static bool trans_SCVTF_sh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_scvt_sh);
> +}
> +
> +static bool trans_SCVTF_dh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_scvt_dh);
> +}
> +
> +static bool trans_SCVTF_ss(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_scvt_ss);
> +}
> +
> +static bool trans_SCVTF_ds(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_scvt_ds);
> +}
> +
> +static bool trans_SCVTF_sd(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_scvt_sd);
> +}
> +
> +static bool trans_SCVTF_dd(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_scvt_dd);
> +}
> +
> +static bool trans_UCVTF_hh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_ucvt_hh);
> +}
> +
> +static bool trans_UCVTF_sh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_ucvt_sh);
> +}
> +
> +static bool trans_UCVTF_dh(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, true, gen_helper_sve_ucvt_dh);
> +}
> +
> +static bool trans_UCVTF_ss(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_ucvt_ss);
> +}
> +
> +static bool trans_UCVTF_ds(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_ucvt_ds);
> +}
> +
> +static bool trans_UCVTF_sd(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_ucvt_sd);
> +}
> +
> +static bool trans_UCVTF_dd(DisasContext *s, arg_rpr_esz *a, uint32_t insn)
> +{
> +    return do_zpz_ptr(s, a->rd, a->rn, a->pg, false, gen_helper_sve_ucvt_dd);
> +}
> +
>  /*
>   *** SVE Memory - 32-bit Gather and Unsized Contiguous Group
>   */
> diff --git a/target/arm/sve.decode b/target/arm/sve.decode
> index 606c4f623c..3abdb87cf5 100644
> --- a/target/arm/sve.decode
> +++ b/target/arm/sve.decode
> @@ -133,6 +133,9 @@
>  @rd_pg_rn       ........ esz:2 ... ... ... pg:3 rn:5 rd:5       &rpr_esz
>  @rd_pg4_pn      ........ esz:2 ... ... .. pg:4 . rn:4 rd:5      &rpr_esz
>
> +# One register operand, with governing predicate, no vector element size
> +@rd_pg_rn_e0    ........ .. ... ... ... pg:3 rn:5 rd:5          &rpr_esz esz=0
> +
>  # Two register operands with a 6-bit signed immediate.
>  @rd_rn_i6       ........ ... rn:5 ..... imm:s6 rd:5             &rri
>
> @@ -681,6 +684,25 @@ FTSMUL          01100101 .. 0 ..... 000 011 ..... .....         @rd_rn_rm
>  FRECPS          01100101 .. 0 ..... 000 110 ..... .....         @rd_rn_rm
>  FRSQRTS         01100101 .. 0 ..... 000 111 ..... .....         @rd_rn_rm
>
> +### SVE FP Unary Operations Predicated Group
> +
> +# SVE integer convert to floating-point
> +SCVTF_hh        01100101 01 010 01 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_sh        01100101 01 010 10 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_dh        01100101 01 010 11 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_ss        01100101 10 010 10 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_sd        01100101 11 010 00 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_ds        01100101 11 010 10 0 101 ... ..... .....        @rd_pg_rn_e0
> +SCVTF_dd        01100101 11 010 11 0 101 ... ..... .....        @rd_pg_rn_e0
> +
> +UCVTF_hh        01100101 01 010 01 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_sh        01100101 01 010 10 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_dh        01100101 01 010 11 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_ss        01100101 10 010 10 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_sd        01100101 11 010 00 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_ds        01100101 11 010 10 1 101 ... ..... .....        @rd_pg_rn_e0
> +UCVTF_dd        01100101 11 010 11 1 101 ... ..... .....        @rd_pg_rn_e0
> +
>  ### SVE Memory - 32-bit Gather and Unsized Contiguous Group
>
>  # SVE load predicate register


--
Alex Bennée

  parent reply	other threads:[~2018-06-27 14:19 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-21  1:53 [Qemu-devel] [PATCH v5 00/35] target/arm SVE patches Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 01/35] target/arm: Implement SVE Memory Contiguous Load Group Richard Henderson
2018-06-22 15:29   ` Peter Maydell
2018-06-26  9:55   ` Alex Bennée
2018-06-26 14:04     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 02/35] target/arm: Implement SVE Contiguous Load, first-fault and no-fault Richard Henderson
2018-06-22 16:04   ` Peter Maydell
2018-06-22 18:37     ` Richard Henderson
2018-06-26 12:52   ` Alex Bennée
2018-06-26 14:06     ` Richard Henderson
2018-06-27 11:37       ` Alex Bennée
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 03/35] target/arm: Implement SVE Memory Contiguous Store Group Richard Henderson
2018-06-25 15:03   ` Peter Maydell
2018-06-27 11:38   ` Alex Bennée
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 04/35] target/arm: Implement SVE load and broadcast quadword Richard Henderson
2018-06-25 15:08   ` Peter Maydell
2018-06-27 14:05   ` Alex Bennée
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 05/35] target/arm: Implement SVE integer convert to floating-point Richard Henderson
2018-06-25 15:21   ` Peter Maydell
2018-06-27 14:19   ` Alex Bennée [this message]
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 06/35] target/arm: Implement SVE floating-point arithmetic (predicated) Richard Henderson
2018-06-25 15:24   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 07/35] target/arm: Implement SVE FP Multiply-Add Group Richard Henderson
2018-06-25 15:32   ` Peter Maydell
2018-06-26 14:08     ` Richard Henderson
2018-06-26 14:11       ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 08/35] target/arm: Implement SVE Floating Point Accumulating Reduction Group Richard Henderson
2018-06-25 15:35   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 09/35] target/arm: Implement SVE load and broadcast element Richard Henderson
2018-06-25 15:46   ` Peter Maydell
2018-06-26 14:10     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 10/35] target/arm: Implement SVE store vector/predicate register Richard Henderson
2018-06-25 15:51   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 11/35] target/arm: Implement SVE scatter stores Richard Henderson
2018-06-25 16:13   ` Peter Maydell
2018-06-26 14:21     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 12/35] target/arm: Implement SVE prefetches Richard Henderson
2018-06-25 16:18   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 13/35] target/arm: Implement SVE gather loads Richard Henderson
2018-06-25 16:55   ` Peter Maydell
2018-06-26 14:39     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 14/35] target/arm: Implement SVE first-fault " Richard Henderson
2018-06-25 16:57   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 15/35] target/arm: Implement SVE scatter store vector immediate Richard Henderson
2018-06-25 17:00   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 16/35] target/arm: Implement SVE floating-point compare vectors Richard Henderson
2018-06-25 17:20   ` Peter Maydell
2018-06-26 16:41     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 17/35] target/arm: Implement SVE floating-point arithmetic with immediate Richard Henderson
2018-06-25 17:27   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 18/35] target/arm: Implement SVE Floating Point Multiply Indexed Group Richard Henderson
2018-06-25 17:47   ` Peter Maydell
2018-06-26 14:50     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 19/35] target/arm: Implement SVE FP Fast Reduction Group Richard Henderson
2018-06-26 10:09   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 20/35] target/arm: Implement SVE Floating Point Unary Operations - Unpredicated Group Richard Henderson
2018-06-26 10:13   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 21/35] target/arm: Implement SVE FP Compare with Zero Group Richard Henderson
2018-06-26 10:18   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 22/35] target/arm: Implement SVE floating-point trig multiply-add coefficient Richard Henderson
2018-06-26 10:25   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 23/35] target/arm: Implement SVE floating-point convert precision Richard Henderson
2018-06-26 10:44   ` Peter Maydell
2018-06-27  4:02     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 24/35] target/arm: Implement SVE floating-point convert to integer Richard Henderson
2018-06-26 10:58   ` Peter Maydell
2018-06-26 18:24     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 25/35] target/arm: Implement SVE floating-point round to integral value Richard Henderson
2018-06-26 12:09   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 26/35] target/arm: Implement SVE floating-point unary operations Richard Henderson
2018-06-26 12:13   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 27/35] target/arm: Implement SVE MOVPRFX Richard Henderson
2018-06-26 12:24   ` Peter Maydell
2018-06-26 14:57     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 28/35] target/arm: Implement SVE floating-point complex add Richard Henderson
2018-06-26 13:17   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 29/35] target/arm: Implement SVE fp complex multiply add Richard Henderson
2018-06-26 13:29   ` Peter Maydell
2018-06-26 15:04     ` Richard Henderson
2018-06-26 15:17       ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 30/35] target/arm: Pass index to AdvSIMD FCMLA (indexed) Richard Henderson
2018-06-26 13:38   ` Peter Maydell
2018-06-26 15:07     ` Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 31/35] target/arm: Implement SVE fp complex multiply add (indexed) Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 32/35] target/arm: Implement SVE dot product (vectors) Richard Henderson
2018-06-26 13:47   ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 33/35] target/arm: Implement SVE dot product (indexed) Richard Henderson
2018-06-26 15:30   ` Peter Maydell
2018-06-26 16:17     ` Richard Henderson
2018-06-26 16:30       ` Peter Maydell
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 34/35] target/arm: Enable SVE for aarch64-linux-user Richard Henderson
2018-06-21  1:53 ` [Qemu-devel] [PATCH v5 35/35] target/arm: Implement ARMv8.2-DotProd Richard Henderson
2018-06-26 15:38   ` Peter Maydell
2018-06-21  5:18 ` [Qemu-devel] [PATCH v5 00/35] target/arm SVE patches no-reply
2018-06-26  9:41 ` Alex Bennée

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=877emkwbvh.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=peter.maydell@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 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.