qemu-devel.nongnu.org archive mirror
 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 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).