From: Richard Sandiford <rdsandiford@googlemail.com>
To: Kenneth Zadeck <zadeck@naturalbridge.com>
Cc: Richard Guenther <richard.guenther@gmail.com>,
Mike Stump <mikestump@comcast.net>,
gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: patch to fix constant math - patch 5 - the rest of the rtl stuff.
Date: Fri, 19 Oct 2012 16:52:00 -0000 [thread overview]
Message-ID: <87mwzibff0.fsf@sandifor-thinkpad.stglab.manchester.uk.ibm.com> (raw)
In-Reply-To: <50747209.2010906@naturalbridge.com> (Kenneth Zadeck's message of "Tue, 09 Oct 2012 14:50:49 -0400")
I can't approve this, but some comments:
Kenneth Zadeck <zadeck@naturalbridge.com> writes:
> diff --git a/gcc/alias.c b/gcc/alias.c
> index 0c6a744..9e67823 100644
> --- a/gcc/alias.c
> +++ b/gcc/alias.c
> @@ -1490,9 +1490,9 @@ rtx_equal_for_memref_p (const_rtx x, const_rtx y)
>
> case VALUE:
> CASE_CONST_UNIQUE:
> - /* There's no need to compare the contents of CONST_DOUBLEs or
> - CONST_INTs because pointer equality is a good enough
> - comparison for these nodes. */
> + /* There's no need to compare the contents of CONST_DOUBLEs,
> + CONST_INTs or CONST_WIDE_INTs because pointer equality is a
> + good enough comparison for these nodes. */
> return 0;
>
> default:
Maybe just:
/* Pointer equality guarantees value equality for these codes. */
> @@ -695,13 +700,14 @@ c_readstr (const char *str, enum machine_mode mode)
> && GET_MODE_SIZE (mode) >= UNITS_PER_WORD)
> j = j + UNITS_PER_WORD - 2 * (j % UNITS_PER_WORD) - 1;
> j *= BITS_PER_UNIT;
> - gcc_assert (j < HOST_BITS_PER_DOUBLE_INT);
>
> if (ch)
> ch = (unsigned char) str[i];
> - c[j / HOST_BITS_PER_WIDE_INT] |= ch << (j % HOST_BITS_PER_WIDE_INT);
> + c.elt_ref (j / HOST_BITS_PER_WIDE_INT) |= ch << (j % HOST_BITS_PER_WIDE_INT);
Long line.
> @@ -4990,12 +4996,13 @@ expand_builtin_signbit (tree exp, rtx target)
>
> if (bitpos < GET_MODE_BITSIZE (rmode))
> {
> - double_int mask = double_int_zero.set_bit (bitpos);
> + wide_int mask;
> + mask = wide_int::set_bit_in_zero (bitpos, rmode);
No real point splitting this.
> @@ -1511,17 +1511,20 @@ Similarly, there is only one object for the integer whose value is
>
> @findex const_double
> @item (const_double:@var{m} @var{i0} @var{i1} @dots{})
> -Represents either a floating-point constant of mode @var{m} or an
> -integer constant too large to fit into @code{HOST_BITS_PER_WIDE_INT}
> -bits but small enough to fit within twice that number of bits (GCC
> -does not provide a mechanism to represent even larger constants). In
> -the latter case, @var{m} will be @code{VOIDmode}. For integral values
> -constants for modes with more bits than twice the number in
> -@code{HOST_WIDE_INT} the implied high order bits of that constant are
> -copies of the top bit of @code{CONST_DOUBLE_HIGH}. Note however that
> -integral values are neither inherently signed nor inherently unsigned;
> -where necessary, signedness is determined by the rtl operation
> -instead.
> +On older ports, this represents either a floating-point constant of
> +mode @var{m} or an integer constant too large to fit into
> +@code{HOST_BITS_PER_WIDE_INT} bits but small enough to fit within
> +twice that number of bits (GCC does not provide a mechanism to
> +represent even larger constants).
No longer true :-)
>[...] In the latter case, @var{m} will be
> +@code{VOIDmode}. For integral values constants for modes with more
> +bits than twice the number in @code{HOST_WIDE_INT} the implied high
> +order bits of that constant are copies of the top bit of
> +@code{CONST_DOUBLE_HIGH}. Note however that integral values are
> +neither inherently signed nor inherently unsigned; where necessary,
> +signedness is determined by the rtl operation instead.
> +
> +On more modern ports, @code{CONST_DOUBLE} only represents floating
> +point values. New ports define to TARGET_SUPPORTS_WIDE_INT to
Truncated sentence.
> @@ -1536,6 +1539,37 @@ machine's or host machine's floating point format. To convert them to
> the precise bit pattern used by the target machine, use the macro
> @code{REAL_VALUE_TO_TARGET_DOUBLE} and friends (@pxref{Data Output}).
>
> +@findex const_wide_int
> +@item (const_wide_int:@var{m} @var{nunits} @var{elt0} @dots{})
> +This contains a garbage collected array of @code{HOST_WIDE_INTS} that
> +is large enough to hold any constant that can be represented on the
> +target.
Suggest dropping "garbage-collected". I think it's a hold-over from
when the vector was separate.
> This form of rtl is only used on targets that define
> +@code{TARGET_SUPPORTS_WIDE_INT} to be non zero and then
> +@code{CONST_DOUBLES} are only used to hold floating point values. If
@code{const_double}s. In general, rtl names should be lower case
in @code{...}, and the 's' should come outside. There are quite
a few instances (because of the detailed documenation :-)) so I won't
list them all. But this applies to const_int and const_wide_int too.
> +The values are stored in a compressed format. The higher order
> +0s or -1s are not represented if they are just the logical sign
> +extension the number that is represented.
extension of ...
> +On older ports, large integers are stored in @code{CONST_DOUBLE} rtl
> +objects. Newer ports define @code{TARGET_SUPPORTS_WIDE_INT} to be non
> +zero to indicate tha large integers are stored in
...that large integers...
> +Converting a port mostly requires looking for the places where
> +@code{CONST_DOUBLES} are used with @code{VOIDmode} and replacing that
> +code with code that accesses @code{CONST_WIDE_INT}s. @code{"grep -i
> +const_double"} at the port level gets you to 95% of the changes that
@samp{grep -i const_double} (I think)
> diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
> index 98c88f7..bcf01e7 100644
> --- a/gcc/dwarf2out.c
> +++ b/gcc/dwarf2out.c
As before, no comments on this.
> +/* V contains a wide_int. A CONST_INT or CONST_WIDE_INT (if
> + TARGET_SUPPORTS_WIDE_INT is defined) or CONST_DOUBLE if
> + TARGET_SUPPORTS_WIDE_INT is not defined is produced based on the
> + number of HOST_WIDE_INTs that are necessary to represent the value
> + in compact form. */
> rtx
> -immed_double_int_const (double_int i, enum machine_mode mode)
> +immed_wide_int_const (const wide_int &v, enum machine_mode mode)
> {
> - return immed_double_const (i.low, i.high, mode);
> + unsigned int len = v.get_len ();
> +
> + if (len < 2)
> + return gen_int_mode (v.elt (0), mode);
> +
I think we should have an assert here that the precision and bitsize of
the mode match those of the wide_int.
> +/* Return a constant integer (CONST_INT or CONST_WIDE_INT) mask value
Might as well drop the "(CONST_INT or CONST_WIDE_INT)".
> + of mode MODE with BITSIZE ones followed by BITPOS zeros, or the
> + complement of that if COMPLEMENT. The mask is truncated if
> + necessary to the width of mode MODE. The mask is zero-extended if
> + BITSIZE+BITPOS is too small for MODE. */
> +
> +static inline rtx
> +mask_rtx (enum machine_mode mode, int bitpos, int bitsize, bool complement)
> +{
> + return immed_wide_int_const
> + (wide_int::shifted_mask (bitpos, bitsize, complement, mode), mode);
> +}
> +
> -/* Return a constant integer (CONST_INT or CONST_DOUBLE) rtx with the value
> - VALUE truncated to BITSIZE bits and then shifted left BITPOS bits. */
> +/* Return a constant integer (CONST_INT or CONST_WIDE_INT) rtx with the value
> + VALUE truncated to BITSIZE bits and then shifted left BITPOS bits. */
>
> static rtx
> lshift_value (enum machine_mode mode, rtx value, int bitpos, int bitsize)
> {
Same here.
> @@ -1022,7 +1024,7 @@ expand_doubleword_shift (enum machine_mode op1_mode, optab binoptab,
> is true when the effective shift value is less than BITS_PER_WORD.
> Set SUPERWORD_OP1 to the shift count that should be used to shift
> OUTOF_INPUT into INTO_TARGET when the condition is false. */
> - tmp = immed_double_const (BITS_PER_WORD, 0, op1_mode);
> + tmp = immed_wide_int_const (wide_int::from_shwi (BITS_PER_WORD, op1_mode), op1_mode);
Long line.
> + wlen = (len + gs - 1)/gs; /* Number of words needed */
Formatting.
> @@ -1145,8 +1145,61 @@ const_int_operand (rtx op, enum machine_mode mode)
> return 1;
> }
>
> +#if TARGET_SUPPORTS_WIDE_INT
> +/* Returns 1 if OP is an operand that is a CONST_INT or CONST_WIDE_INT
> + of mode MODE. */
> +int
> +const_scalar_int_operand (rtx op, enum machine_mode mode)
> +{
> + if (!CONST_SCALAR_INT_P (op))
> + return 0;
> +
> + if (mode != VOIDmode)
> + {
> + int prec = GET_MODE_PRECISION (mode);
> + int bitsize = GET_MODE_BITSIZE (mode);
> +
> + if (CONST_WIDE_INT_NUNITS (op) * HOST_BITS_PER_WIDE_INT > bitsize)
> + return 0;
Doesn't seem to be protected by a check for CONST_WIDE_INT.
> @@ -5179,13 +4815,11 @@ static rtx
> simplify_immed_subreg (enum machine_mode outermode, rtx op,
> enum machine_mode innermode, unsigned int byte)
> {
> - /* We support up to 512-bit values (for V8DFmode). */
> enum {
> - max_bitsize = 512,
> value_bit = 8,
> value_mask = (1 << value_bit) - 1
> };
> - unsigned char value[max_bitsize / value_bit];
> + unsigned char value [MAX_BITSIZE_MODE_ANY_MODE/value_bit];
Formatting (original was right).
> @@ -5206,6 +4841,9 @@ simplify_immed_subreg (enum machine_mode outermode, rtx op,
> if (COMPLEX_MODE_P (outermode))
> return NULL_RTX;
>
> + /* We support any size mode. */
> + max_bitsize = MAX (GET_MODE_BITSIZE (outermode), GET_MODE_BITSIZE (innermode));
Long line.
Richard
next prev parent reply other threads:[~2012-10-19 16:22 UTC|newest]
Thread overview: 217+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-03 17:17 patch to fix Kenneth Zadeck
2012-10-03 20:47 ` Marc Glisse
2012-10-03 22:05 ` Kenneth Zadeck
2012-10-04 13:17 ` Marc Glisse
2012-10-04 15:19 ` Kenneth Zadeck
2012-10-04 16:55 ` Marc Glisse
2012-10-04 21:06 ` Marc Glisse
2012-10-04 23:02 ` Kenneth Zadeck
2012-10-05 7:05 ` Marc Glisse
2012-10-03 22:55 ` Mike Stump
2012-10-04 12:48 ` Richard Guenther
2012-10-04 13:55 ` patch to fix constant math Kenneth Zadeck
2012-10-04 16:58 ` Richard Guenther
2012-10-04 18:08 ` Kenneth Zadeck
2012-10-04 19:27 ` Richard Sandiford
2012-10-05 9:27 ` Richard Guenther
2012-10-05 9:29 ` Richard Guenther
2012-10-05 9:56 ` Richard Sandiford
2012-10-05 10:34 ` Richard Guenther
2012-10-05 11:24 ` Richard Sandiford
2012-10-05 11:42 ` Richard Guenther
2012-10-05 12:26 ` Richard Sandiford
2012-10-05 12:39 ` Richard Guenther
2012-10-05 13:11 ` Richard Sandiford
2012-10-05 13:18 ` Richard Sandiford
2012-10-05 13:53 ` Richard Guenther
2012-10-05 14:15 ` Richard Sandiford
2012-10-05 14:36 ` Richard Guenther
2012-10-05 14:41 ` Kenneth Zadeck
2012-10-05 14:53 ` Richard Sandiford
2012-10-05 13:49 ` Richard Guenther
2012-10-05 16:34 ` Kenneth Zadeck
2012-10-05 17:29 ` Richard Sandiford
2012-10-05 17:53 ` Kenneth Zadeck
2012-10-05 22:12 ` patch to fix constant math - first small patch Kenneth Zadeck
2012-10-05 22:48 ` patch to fix constant math - second " Kenneth Zadeck
2012-10-06 15:55 ` patch to fix constant math - third " Kenneth Zadeck
2012-10-08 9:08 ` Richard Guenther
2012-10-08 11:37 ` Kenneth Zadeck
2012-10-08 12:11 ` Richard Guenther
2012-10-08 19:43 ` Richard Sandiford
2012-10-09 15:10 ` patch to fix constant math - 4th patch - the wide-int class Kenneth Zadeck
2012-10-23 14:33 ` Richard Biener
2012-10-23 16:25 ` Kenneth Zadeck
2012-10-23 18:52 ` Lawrence Crowl
2012-10-23 19:27 ` Kenneth Zadeck
2012-10-23 20:51 ` Lawrence Crowl
2012-10-23 21:34 ` Kenneth Zadeck
2012-10-24 10:10 ` Richard Biener
2012-10-24 17:30 ` Mike Stump
2012-10-25 10:55 ` Richard Biener
2012-10-25 10:59 ` Kenneth Zadeck
2012-10-25 12:12 ` Richard Biener
2012-10-31 11:01 ` Richard Sandiford
2012-10-31 12:01 ` Richard Biener
2012-10-31 12:12 ` Richard Sandiford
2012-10-31 12:14 ` Richard Biener
2012-10-31 12:23 ` Richard Sandiford
2012-10-31 12:50 ` Richard Biener
2012-10-31 13:50 ` Richard Sandiford
2012-10-31 13:56 ` Richard Biener
2012-10-31 14:26 ` Kenneth Zadeck
2012-10-31 19:45 ` Mike Stump
2012-10-31 15:52 ` Kenneth Zadeck
2012-10-31 14:39 ` Kenneth Zadeck
2012-10-31 19:22 ` Mike Stump
2012-10-31 13:54 ` Kenneth Zadeck
2012-10-31 14:07 ` Richard Biener
2012-10-31 14:25 ` Kenneth Zadeck
2012-10-31 14:25 ` Richard Biener
2012-10-31 14:30 ` Kenneth Zadeck
2012-11-01 22:13 ` patch to fix constant math - 8th patch - tree-vrp.c Kenneth Zadeck
2012-11-01 22:28 ` Marc Glisse
2012-11-01 22:35 ` Kenneth Zadeck
2012-11-01 22:33 ` patch to fix constant math - 4th patch - wide-int.[ch] refresh Kenneth Zadeck
2012-11-01 22:36 ` Kenneth Zadeck
2012-11-30 16:46 ` patch to fix constant math - 4th patch - the wide-int class Kenneth Zadeck
2012-11-30 17:00 ` patch to fix constant math - 5th patch - the rtl level changes Kenneth Zadeck
2012-11-30 18:13 ` patch to add storage classes to wide int Kenneth Zadeck
2012-11-30 19:05 ` Kenneth Zadeck
2012-12-01 9:28 ` Richard Sandiford
2012-12-01 13:43 ` Kenneth Zadeck
2013-02-27 1:59 ` patch to fix constant math - 4th patch - the wide-int class - patch ping for the next stage 1 Kenneth Zadeck
2013-03-27 14:54 ` Richard Biener
2013-04-04 8:08 ` Kenneth Zadeck
2013-04-02 15:40 ` Richard Biener
2013-04-02 19:23 ` Kenneth Zadeck
2013-04-03 10:44 ` Richard Biener
2013-04-03 13:36 ` Kenneth Zadeck
2013-04-03 14:46 ` Richard Biener
2013-04-03 19:18 ` Kenneth Zadeck
2013-04-04 11:45 ` Richard Biener
2013-04-08 5:28 ` Comments on the suggestion to use infinite precision math for wide int Kenneth Zadeck
2013-04-08 10:32 ` Florian Weimer
2013-04-08 13:58 ` Kenneth Zadeck
2013-04-08 14:00 ` Robert Dewar
2013-04-08 14:12 ` Kenneth Zadeck
2013-04-08 14:41 ` Robert Dewar
2013-04-08 15:10 ` Kenneth Zadeck
2013-04-08 17:18 ` Robert Dewar
2013-04-08 17:22 ` Kenneth Zadeck
2013-04-08 19:14 ` Robert Dewar
2013-04-08 23:48 ` Lawrence Crowl
2013-04-09 1:22 ` Robert Dewar
2013-04-09 1:56 ` Kenneth Zadeck
2013-04-09 2:10 ` Robert Dewar
2013-04-09 7:06 ` Mike Stump
2013-04-09 8:20 ` Robert Dewar
2013-04-09 8:22 ` Kenneth Zadeck
2013-04-09 8:24 ` Robert Dewar
2013-04-09 12:42 ` Florian Weimer
2013-04-09 15:06 ` Robert Dewar
2013-04-09 16:16 ` Florian Weimer
2013-04-08 13:12 ` Richard Biener
2013-04-08 13:32 ` Kenneth Zadeck
2013-04-08 13:44 ` Robert Dewar
2013-04-08 14:26 ` Kenneth Zadeck
2013-04-08 14:35 ` Robert Dewar
2013-04-08 19:06 ` Richard Biener
2013-04-08 22:34 ` Lawrence Crowl
2013-04-09 9:47 ` Richard Biener
[not found] ` <CAGqM8fZ7NxiMnC6PTA8v6w_E6ZJ5HbjhJXzh-HAOJqaSx+7rnw@mail.gmail.com>
2013-04-10 9:44 ` Richard Biener
2013-04-10 17:43 ` Mike Stump
2013-04-10 17:53 ` Kenneth Zadeck
2013-04-08 23:46 ` Lawrence Crowl
2013-04-22 21:39 ` patch to fix constant math - 4th patch - the wide-int class - patch ping for the next stage 1 Richard Sandiford
2013-04-23 0:35 ` Richard Biener
2013-04-23 6:47 ` Richard Sandiford
2013-04-05 15:05 ` Kenneth Zadeck
2013-04-08 13:06 ` Richard Biener
2013-04-17 0:49 ` Kenneth Zadeck
2013-04-17 3:41 ` patch to fix constant math -5th patch, rtl Kenneth Zadeck
2013-04-24 13:25 ` Richard Biener
2013-04-24 13:37 ` Richard Sandiford
2013-04-24 14:18 ` Richard Biener
2013-04-24 14:34 ` Richard Sandiford
2013-04-24 14:37 ` Richard Biener
2013-04-24 14:53 ` Richard Sandiford
2013-04-24 15:07 ` Richard Biener
2013-04-24 15:13 ` Kenneth Zadeck
2013-04-24 15:45 ` Richard Sandiford
2013-04-24 16:51 ` Richard Biener
2013-04-24 18:24 ` Richard Sandiford
2013-05-03 11:28 ` Richard Biener
2013-05-03 12:38 ` Richard Sandiford
2013-05-03 12:53 ` Richard Biener
2013-05-03 13:50 ` Richard Sandiford
2013-05-03 14:27 ` Kenneth Zadeck
2013-04-25 8:38 ` Kenneth Zadeck
2013-05-03 11:34 ` Richard Biener
2013-05-03 11:50 ` Kenneth Zadeck
2013-05-03 12:12 ` Richard Biener
2013-05-03 12:31 ` Kenneth Zadeck
2013-05-03 12:40 ` Richard Biener
2013-05-03 14:09 ` Kenneth Zadeck
2013-05-03 12:48 ` Richard Sandiford
2013-05-03 13:06 ` Richard Biener
2013-05-03 13:23 ` Richard Sandiford
2013-05-03 15:32 ` Kenneth Zadeck
2013-04-24 14:57 ` Kenneth Zadeck
2013-04-24 15:49 ` Richard Biener
2013-04-24 17:11 ` Richard Sandiford
2013-05-03 11:19 ` Richard Biener
2013-05-03 12:46 ` Kenneth Zadeck
2013-05-03 13:02 ` Richard Biener
2013-05-03 14:34 ` Kenneth Zadeck
2013-05-02 17:22 ` Kenneth Zadeck
2013-04-17 7:34 ` patch to fix constant math - builtins.c - the first of the tree level patches for wide-int Kenneth Zadeck
2013-05-02 17:53 ` Kenneth Zadeck
2013-04-17 15:01 ` patch to fix constant math - 4th patch - the wide-int class - patch ping for the next stage 1 Kenneth Zadeck
2013-04-19 15:35 ` Richard Biener
2013-04-22 7:15 ` Kenneth Zadeck
2013-04-22 15:21 ` Richard Biener
2013-04-23 8:11 ` Kenneth Zadeck
2013-04-22 18:53 ` Kenneth Zadeck
2013-04-22 19:17 ` richard, i accidently pushed send rather than save, the previous email was not finished, just ignore it Kenneth Zadeck
2013-05-02 17:21 ` patch to fix constant math - 4th patch - the wide-int class - patch ping for the next stage 1 Kenneth Zadeck
2012-10-31 20:07 ` patch to fix constant math - 4th patch - the wide-int class Mike Stump
2012-10-23 18:10 ` Lawrence Crowl
2012-10-09 18:51 ` patch to fix constant math - patch 5 - the rest of the rtl stuff Kenneth Zadeck
2012-10-19 16:52 ` Richard Sandiford [this message]
2012-11-09 13:22 ` patch to fix constant math - third small patch Kenneth Zadeck
2012-10-08 9:07 ` patch to fix constant math - second " Richard Guenther
2012-11-08 18:14 ` Kenneth Zadeck
2012-11-26 15:31 ` Richard Biener
2013-02-27 0:28 ` patch to fix constant math - second small patch -patch ping for next stage 1 Kenneth Zadeck
2013-03-27 14:18 ` Richard Biener
2013-03-27 14:23 ` Kenneth Zadeck
2013-03-27 15:07 ` Richard Biener
2013-03-28 14:47 ` Kenneth Zadeck
2012-10-06 0:14 ` patch to fix constant math - first small patch Joseph S. Myers
2012-10-08 19:25 ` Kenneth Zadeck
2012-11-08 17:37 ` Kenneth Zadeck
2013-02-27 0:23 ` patch to fix constant math - first small patch - patch ping for the next stage 1 Kenneth Zadeck
2013-03-27 14:13 ` Richard Biener
2013-03-28 15:06 ` Kenneth Zadeck
2013-03-31 17:51 ` Kenneth Zadeck
2013-04-02 9:45 ` Richard Biener
2013-04-02 14:34 ` Kenneth Zadeck
2013-04-02 15:29 ` Richard Biener
2013-04-02 22:43 ` Kenneth Zadeck
2013-04-03 10:48 ` Richard Biener
2013-04-03 12:21 ` Kenneth Zadeck
2013-04-03 13:38 ` Richard Biener
2013-04-04 3:13 ` Kenneth Zadeck
2012-10-07 12:47 ` patch to fix constant math Richard Guenther
2012-10-07 13:11 ` Kenneth Zadeck
2012-10-07 13:19 ` Richard Guenther
2012-10-07 14:58 ` Kenneth Zadeck
2012-10-08 9:27 ` Richard Guenther
2012-10-08 15:01 ` Nathan Froyd
2012-10-08 15:11 ` Robert Dewar
2012-10-08 19:55 ` Richard Sandiford
2012-10-09 7:09 ` Richard Guenther
2012-10-08 16:18 ` Richard Guenther
2012-10-05 13:11 ` Kenneth Zadeck
2012-10-04 15:39 ` patch to fix Kenneth Zadeck
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=87mwzibff0.fsf@sandifor-thinkpad.stglab.manchester.uk.ibm.com \
--to=rdsandiford@googlemail.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=mikestump@comcast.net \
--cc=richard.guenther@gmail.com \
--cc=zadeck@naturalbridge.com \
/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 read-only IMAP folder(s) and NNTP newsgroup(s).