public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Noah Goldstein <goldstein.w.n@gmail.com>
To: "H.J. Lu" <hjl.tools@gmail.com>
Cc: GNU C Library <libc-alpha@sourceware.org>
Subject: Re: PING [PATCH v2] x86-64: Add sysdeps/x86_64/fpu/Makeconfig
Date: Wed, 20 Oct 2021 13:47:10 -0500	[thread overview]
Message-ID: <CAFUsyfL0xBUegxtk=ZxnsxLVjCM_YfR+uHzGXVHGZNWQoi9Q1g@mail.gmail.com> (raw)
In-Reply-To: <CAMe9rOpnwdE4D9QTmf3OK_e7a7tZHDtWVFTv1Oc12VCBNL98Fg@mail.gmail.com>

On Wed, Oct 20, 2021 at 1:19 PM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Wed, Oct 20, 2021 at 11:07 AM Noah Goldstein <goldstein.w.n@gmail.com> wrote:
> >
> > On Wed, Oct 20, 2021 at 11:01 AM H.J. Lu via Libc-alpha
> > <libc-alpha@sourceware.org> wrote:
> > >
> > > On Fri, Oct 15, 2021 at 6:12 AM H.J. Lu <hjl.tools@gmail.com> wrote:
> > > >
> > > > 1. Add sysdeps/x86_64/fpu/Makeconfig to auto-generate libmvec.mk, which
> > > > contains libmvec ABI test dependencies and CFLAGS, in the build directory.
> > > > 2. Include libmvec.mk for libmvec ABI test dependencies and CFLAGS.
> > > >
> > > > Tested on SSE4, AVX, AVX2 and AVX512 machines.
> > > > ---
> > > >  sysdeps/x86_64/fpu/Makeconfig         |  92 ++++++++++++++++++
> > > >  sysdeps/x86_64/fpu/Makefile           | 134 +++++++++-----------------
> > > >  sysdeps/x86_64/fpu/multiarch/Makefile |  68 ++++---------
> > > >  3 files changed, 155 insertions(+), 139 deletions(-)
> > > >  create mode 100644 sysdeps/x86_64/fpu/Makeconfig
> > > >
> > > > diff --git a/sysdeps/x86_64/fpu/Makeconfig b/sysdeps/x86_64/fpu/Makeconfig
> > > > new file mode 100644
> > > > index 0000000000..0a9341cdd9
> > > > --- /dev/null
> > > > +++ b/sysdeps/x86_64/fpu/Makeconfig
> > > > @@ -0,0 +1,92 @@
> > > > +# Generate libmvec.mk for libmvec ABI tests.
> > > > +
> > > > +# Copyright (C) 2021 Free Software Foundation, Inc.
> > > > +# This file is part of the GNU C Library.
> > > > +
> > > > +# The GNU C Library is free software; you can redistribute it and/or
> > > > +# modify it under the terms of the GNU Lesser General Public
> > > > +# License as published by the Free Software Foundation; either
> > > > +# version 2.1 of the License, or (at your option) any later version.
> > > > +
> > > > +# The GNU C Library is distributed in the hope that it will be useful,
> > > > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > > > +# Lesser General Public License for more details.
> > > > +
> > > > +# You should have received a copy of the GNU Lesser General Public
> > > > +# License along with the GNU C Library; if not, see
> > > > +# <https://www.gnu.org/licenses/>.
> > > > +
> > > > +-include $(common-objpfx)libmvec.mk
> > > > +postclean-generated += libmvec.mk
> > > > +
> > > > +# Define for both math and mathvec directories.
> > > > +libmvec-funcs = \
> > > > +  cos \
> > > > +  exp \
> > > > +  log \
> > > > +  pow \
> > > > +  sin \
> > > > +  sincos \
> > > > +
> > > > +# FIXME: Add ABI tests for all libmvec functions and replace
> > > > +# libmvec-abi-funcs with libmvec-funcs.
> > > > +libmvec-abi-funcs = \
> > > > +  sincos
> >
> > What if we add a function that only supports some extensions (i.e just
> > AVX2 but not AVX and AVX512)?
>
> All libmvec functions must support SSE, AVX and AVX512.
>
> > > > +
> > > > +# The base libmvec ABI tests.
> > > > +libmvec-abi-func-tests = \
> > > > +  $(addprefix test-double-libmvec-,$(libmvec-abi-funcs)) \
> > > > +  $(addsuffix f,$(addprefix test-float-libmvec-,$(libmvec-abi-funcs)))
> > > > +
> > > > +# The AVX libmvec ABI tests.
> > > > +libmvec-abi-func-avx-tests = \
> > > > +  $(addsuffix -avx,$(libmvec-abi-func-tests))
> > > > +#
> > > > +# The AVX2 libmvec ABI tests.
> > > > +libmvec-abi-func-avx2-tests = \
> > > > +  $(addsuffix -avx2,$(libmvec-abi-func-tests))
> > > > +#
> > > > +# The AVX512F libmvec ABI tests.
> > > > +libmvec-abi-func-avx512f-tests = \
> > > > +  $(addsuffix -avx512f,$(libmvec-abi-func-tests))
> > > > +
> > > > +$(common-objpfx)libmvec.mk: $(common-objpfx)config.make
> > > > +       (echo "ifeq (\$$(subdir)\$$(build-mathvec),mathyes)"; \
> > > > +        echo; \
> > > > +        for i in "" "-avx" "-avx2" "-avx512f"; do \
> > > > +          for t in $(libmvec-abi-func-tests); do \
> > > > +            echo "\$$(objpfx)$$t$$i: \\"; \
> > > > +            echo "  \$$(objpfx)$$t$$i.o \\"; \
> > > > +            echo "  \$$(objpfx)test-libmvec$$i.o \$$(libmvec)"; \
> > > > +            echo; \
> > > > +          done; \
> > > > +        done; \
> > > > +        for t in $(libmvec-abi-funcs); do \
> > > > +          echo "CFLAGS-test-double-libmvec-$$t.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags)"; \
> > > > +          echo "CFLAGS-test-double-libmvec-$$t-avx.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(double-vlen4-arch-ext-cflags)"; \
> > > > +          echo "CFLAGS-test-double-libmvec-$$t-avx2.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(double-vlen4-arch-ext2-cflags)"; \
> > > > +          echo "CFLAGS-test-double-libmvec-$$t-avx512f.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(double-vlen8-arch-ext-cflags)"; \
> > > > +          echo; \
> > > > +          echo "CFLAGS-test-float-libmvec-$${t}f.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags)"; \
> > > > +          echo "CFLAGS-test-float-libmvec-$${t}f-avx.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(float-vlen8-arch-ext-cflags)"; \
> > > > +          echo "CFLAGS-test-float-libmvec-$${t}f-avx2.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(float-vlen8-arch-ext2-cflags)"; \
> > > > +          echo "CFLAGS-test-float-libmvec-$${t}f-avx512f.c = \\"; \
> > > > +          echo "  \$$(libmvec-abi-test-cflags) \\"; \
> > > > +          echo "  \$$(float-vlen16-arch-ext-cflags)"; \
> > > > +          echo; \
> > > > +        done; \
> > > > +        echo "endif") > $@T
> > > > +       mv -f $@T $@
> > > > diff --git a/sysdeps/x86_64/fpu/Makefile b/sysdeps/x86_64/fpu/Makefile
> > > > index e5a65750c0..d172ae815d 100644
> > > > --- a/sysdeps/x86_64/fpu/Makefile
> > > > +++ b/sysdeps/x86_64/fpu/Makefile
> > > > @@ -1,87 +1,48 @@
> > > >  ifeq ($(subdir),mathvec)
> > > > -libmvec-support += svml_d_cos2_core svml_d_cos4_core_avx \
> > > > -                  svml_d_cos4_core svml_d_cos8_core \
> > > > -                  svml_d_sin2_core svml_d_sin4_core_avx \
> > > > -                  svml_d_sin4_core svml_d_sin8_core svml_d_trig_data \
> > > > -                  svml_s_cosf4_core svml_s_cosf8_core_avx \
> > > > -                  svml_s_cosf8_core svml_s_cosf16_core svml_s_trig_data \
> > > > -                  svml_s_sinf4_core svml_s_sinf8_core_avx \
> > > > -                  svml_s_sinf8_core svml_s_sinf16_core \
> > > > -                  svml_d_sincos2_core svml_d_sincos4_core_avx \
> > > > -                  svml_d_sincos4_core svml_d_sincos8_core \
> > > > -                  svml_d_log2_core svml_d_log4_core_avx svml_d_log4_core \
> > > > -                  svml_d_log8_core svml_d_log_data svml_s_logf4_core \
> > > > -                  svml_s_logf8_core_avx svml_s_logf8_core svml_s_logf16_core \
> > > > -                  svml_s_logf_data svml_d_exp2_core svml_d_exp4_core_avx \
> > > > -                  svml_d_exp4_core svml_d_exp8_core svml_d_exp_data \
> > > > -                  svml_s_expf4_core svml_s_expf8_core_avx svml_s_expf8_core \
> > > > -                  svml_s_expf16_core svml_s_expf_data svml_d_pow2_core \
> > > > -                  svml_d_pow4_core_avx svml_d_pow4_core svml_d_pow8_core \
> > > > -                  svml_d_pow_data svml_s_powf4_core svml_s_powf8_core_avx \
> > > > -                  svml_s_powf8_core svml_s_powf16_core svml_s_powf_data \
> > > > -                  svml_s_sincosf4_core svml_s_sincosf8_core_avx \
> > > > -                  svml_s_sincosf8_core svml_s_sincosf16_core
> > > > +libmvec-double-func-list = \
> > > > +  2_core \
> > > > +  4_core \
> > > > +  4_core_avx \
> > > > +  8_core
> > > > +libmvec-float-func-list = \
> > > > +  f4_core \
> > > > +  f8_core \
> > > > +  f8_core_avx \
> > > > +  f16_core
> > > > +libmvec-support += \
> > > > +  svml_d_exp_data \
> > > > +  svml_d_log_data \
> > > > +  svml_d_pow_data \
> > > > +  svml_d_trig_data \
> > > > +  svml_s_expf_data \
> > > > +  svml_s_logf_data \
> > > > +  svml_s_powf_data \
> > > > +  svml_s_trig_data \
> > > > +  $(foreach l,$(libmvec-double-func-list), \
> > > > +    $(addprefix svml_d_,$(addsuffix $(l),$(libmvec-funcs)))) \
> > > > +  $(foreach l,$(libmvec-float-func-list), \
> > > > +    $(addprefix svml_s_,$(addsuffix $(l),$(libmvec-funcs))))
> > > >  endif
> > > >
> > > >  # Variables for libmvec tests.
> > > > -ifeq ($(subdir),math)
> > > > -ifeq ($(build-mathvec),yes)
> > > > +ifeq ($(subdir)$(build-mathvec),mathyes)
> > > >  libmvec-tests += double-vlen2 double-vlen4 double-vlen4-avx2 \
> > > > -                float-vlen4 float-vlen8 float-vlen8-avx2
> > > > -tests += test-double-libmvec-sincos test-double-libmvec-sincos-avx \
> > > > -        test-double-libmvec-sincos-avx2 test-float-libmvec-sincosf \
> > > > -        test-float-libmvec-sincosf-avx test-float-libmvec-sincosf-avx2
> > > > -test-extras += test-libmvec test-libmvec-avx \
> > > > -              test-libmvec-avx2 test-libmvec-avx512f
> > > > -extra-test-objs += test-libmvec.o test-libmvec-avx.o \
> > > > -                  test-libmvec-avx2.o test-libmvec-avx512f.o
> > > > -
> > > > -$(objpfx)test-double-libmvec-sincos: \
> > > > -  $(objpfx)test-double-libmvec-sincos.o \
> > > > -  $(objpfx)test-libmvec.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-double-libmvec-sincos-avx: \
> > > > -  $(objpfx)test-double-libmvec-sincos-avx.o \
> > > > -  $(objpfx)test-libmvec-avx.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-double-libmvec-sincos-avx2: \
> > > > -  $(objpfx)test-double-libmvec-sincos-avx2.o \
> > > > -  $(objpfx)test-libmvec-avx2.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-float-libmvec-sincosf: \
> > > > -  $(objpfx)test-float-libmvec-sincosf.o \
> > > > -  $(objpfx)test-libmvec.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-float-libmvec-sincosf-avx: \
> > > > -  $(objpfx)test-float-libmvec-sincosf-avx.o \
> > > > -  $(objpfx)test-libmvec-avx.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-float-libmvec-sincosf-avx2: \
> > > > -  $(objpfx)test-float-libmvec-sincosf-avx2.o \
> > > > -  $(objpfx)test-libmvec-avx2.o $(libmvec)
> > > > -
> > > > -libmvec-tests += double-vlen8 float-vlen16
> > > > -tests += test-double-libmvec-sincos-avx512f \
> > > > -        test-float-libmvec-sincosf-avx512f
> > > > -test-extras += test-libmvec-avx512f
> > > > -extra-test-objs += test-libmvec-avx512f.o
> > > > -
> > > > -$(objpfx)test-double-libmvec-sincos-avx512f: \
> > > > -  $(objpfx)test-double-libmvec-sincos-avx512f.o \
> > > > -  $(objpfx)test-libmvec-avx512f.o $(libmvec)
> > > > -
> > > > -$(objpfx)test-float-libmvec-sincosf-avx512f: \
> > > > -  $(objpfx)test-float-libmvec-sincosf-avx512f.o \
> > > > -  $(objpfx)test-libmvec-avx512f.o $(libmvec)
> > > > -
> > > > -double-vlen2-funcs = cos exp log pow sin sincos
> > > > -double-vlen4-funcs = cos exp log pow sin sincos
> > > > -double-vlen4-avx2-funcs = cos exp log pow sin sincos
> > > > -double-vlen8-funcs = cos exp log pow sin sincos
> > > > -float-vlen4-funcs = cos exp log pow sin sincos
> > > > -float-vlen8-funcs = cos exp log pow sin sincos
> > > > -float-vlen8-avx2-funcs = cos exp log pow sin sincos
> > > > -float-vlen16-funcs = cos exp log pow sin sincos
> > > > +                float-vlen4 float-vlen8 float-vlen8-avx2 \
> > > > +                double-vlen8 float-vlen16
> > > > +tests += \
> > > > +  $(libmvec-abi-func-tests) \
> > > > +  $(libmvec-abi-func-avx-tests) \
> > > > +  $(libmvec-abi-func-avx2-tests) \
> > > > +  $(libmvec-abi-func-avx512f-tests)
> > > > +
> > > > +double-vlen2-funcs = $(libmvec-funcs)
> > > > +double-vlen4-funcs = $(libmvec-funcs)
> > > > +double-vlen4-avx2-funcs = $(libmvec-funcs)
> > > > +double-vlen8-funcs = $(libmvec-funcs)
> > > > +float-vlen4-funcs = $(libmvec-funcs)
> > > > +float-vlen8-funcs = $(libmvec-funcs)
> > > > +float-vlen8-avx2-funcs = $(libmvec-funcs)
> > > > +float-vlen16-funcs = $(libmvec-funcs)
> > > >
> > > >  double-vlen4-arch-ext-cflags = -mavx
> > > >  double-vlen4-arch-ext2-cflags = -mavx2
> > > > @@ -91,22 +52,13 @@ float-vlen8-arch-ext-cflags = -mavx
> > > >  float-vlen8-arch-ext2-cflags = -mavx2
> > > >  float-vlen16-arch-ext-cflags = -mavx512f
> > > >
> > > > -libmvec-sincos-cflags = $(libm-test-fast-math-cflags) -fno-inline -fopenmp -Wno-unknown-pragmas
> > > > +libmvec-abi-test-cflags = \
> > > > +  $(libm-test-fast-math-cflags) \
> > > > +  -fno-inline -fopenmp -Wno-unknown-pragmas
> > > >
> > > >  CFLAGS-test-double-vlen4-avx2-wrappers.c = $(double-vlen4-arch-ext2-cflags)
> > > >
> > > >  CFLAGS-test-float-vlen8-avx2-wrappers.c = $(float-vlen8-arch-ext2-cflags)
> > > > -
> > > > -CFLAGS-test-double-libmvec-sincos.c = $(libmvec-sincos-cflags)
> > > > -CFLAGS-test-double-libmvec-sincos-avx.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext-cflags)
> > > > -CFLAGS-test-double-libmvec-sincos-avx2.c = $(libmvec-sincos-cflags) $(double-vlen4-arch-ext2-cflags)
> > > > -CFLAGS-test-double-libmvec-sincos-avx512f.c = $(libmvec-sincos-cflags) $(double-vlen8-arch-ext-cflags)
> > > > -
> > > > -CFLAGS-test-float-libmvec-sincosf.c = $(libmvec-sincos-cflags)
> > > > -CFLAGS-test-float-libmvec-sincosf-avx.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext-cflags)
> > > > -CFLAGS-test-float-libmvec-sincosf-avx2.c = $(libmvec-sincos-cflags) $(float-vlen8-arch-ext2-cflags)
> > > > -CFLAGS-test-float-libmvec-sincosf-avx512f.c = $(libmvec-sincos-cflags) $(float-vlen16-arch-ext-cflags)
> > > > -endif
> > > >  endif
> > > >
> > > >  ifeq ($(subdir)$(config-cflags-mprefer-vector-width),mathyes)
> > > > diff --git a/sysdeps/x86_64/fpu/multiarch/Makefile b/sysdeps/x86_64/fpu/multiarch/Makefile
> > > > index d425ffd6d3..ec796277a5 100644
> > > > --- a/sysdeps/x86_64/fpu/multiarch/Makefile
> > > > +++ b/sysdeps/x86_64/fpu/multiarch/Makefile
> > > > @@ -59,52 +59,24 @@ CFLAGS-s_tan-avx.c = -msse2avx -DSSE2AVX
> > > >  endif
> > > >
> > > >  ifeq ($(subdir),mathvec)
> > > > -libmvec-sysdep_routines += svml_d_cos2_core_sse4 svml_d_cos4_core_avx2 \
> > > > -                          svml_d_cos8_core_avx512 svml_d_sin2_core_sse4 \
> > > > -                          svml_d_sin4_core_avx2 svml_d_sin8_core_avx512 \
> > > > -                          svml_d_log2_core_sse4 svml_d_log4_core_avx2 \
> > > > -                          svml_d_log8_core_avx512 svml_d_sincos2_core_sse4 \
> > > > -                          svml_d_sincos4_core_avx2 svml_d_sincos8_core_avx512 \
> > > > -                          svml_s_cosf4_core_sse4 svml_s_cosf8_core_avx2 \
> > > > -                          svml_s_cosf16_core_avx512 svml_s_sinf4_core_sse4 \
> > > > -                          svml_s_sinf8_core_avx2 svml_s_sinf16_core_avx512 \
> > > > -                          svml_s_logf4_core_sse4 svml_s_logf8_core_avx2 \
> > > > -                          svml_s_logf16_core_avx512 svml_d_exp2_core_sse4 \
> > > > -                          svml_d_exp4_core_avx2 svml_d_exp8_core_avx512 \
> > > > -                          svml_s_expf4_core_sse4 svml_s_expf8_core_avx2 \
> > > > -                          svml_s_expf16_core_avx512 svml_d_pow2_core_sse4 \
> > > > -                          svml_d_pow4_core_avx2 svml_d_pow8_core_avx512 \
> > > > -                          svml_s_powf4_core_sse4 svml_s_powf8_core_avx2 \
> > > > -                          svml_s_powf16_core_avx512 svml_s_sincosf4_core_sse4 \
> > > > -                          svml_s_sincosf8_core_avx2 \
> > > > -                          svml_s_sincosf16_core_avx512 \
> > > > -                          svml_d_cos2_core-sse2 svml_d_cos4_core-sse \
> > > > -                          svml_d_cos8_core-avx2 svml_d_exp2_core-sse2 \
> > > > -                          svml_d_exp4_core-sse svml_d_exp8_core-avx2 \
> > > > -                          svml_d_log2_core-sse2 svml_d_log4_core-sse \
> > > > -                          svml_d_log8_core-avx2 svml_d_pow2_core-sse2 \
> > > > -                          svml_d_pow4_core-sse svml_d_pow8_core-avx2 \
> > > > -                          svml_d_sin2_core-sse2 svml_d_sin4_core-sse \
> > > > -                          svml_d_sin8_core-avx2 \
> > > > -                          svml_d_sincos2_core-sse2 \
> > > > -                          svml_d_sincos4_core-sse \
> > > > -                          svml_d_sincos8_core-avx2 \
> > > > -                          svml_s_cosf16_core-avx2 \
> > > > -                          svml_s_cosf4_core-sse2 \
> > > > -                          svml_s_cosf8_core-sse \
> > > > -                          svml_s_expf16_core-avx2 \
> > > > -                          svml_s_expf4_core-sse2 \
> > > > -                          svml_s_expf8_core-sse \
> > > > -                          svml_s_logf16_core-avx2 \
> > > > -                          svml_s_logf4_core-sse2 \
> > > > -                          svml_s_logf8_core-sse \
> > > > -                          svml_s_powf16_core-avx2 \
> > > > -                          svml_s_powf4_core-sse2 \
> > > > -                          svml_s_powf8_core-sse \
> > > > -                          svml_s_sincosf16_core-avx2 \
> > > > -                          svml_s_sincosf4_core-sse2 \
> > > > -                          svml_s_sincosf8_core-sse \
> > > > -                          svml_s_sinf16_core-avx2 \
> > > > -                          svml_s_sinf4_core-sse2 \
> > > > -                          svml_s_sinf8_core-sse
> > > > +libmvec-multiarch-double-func-list = \
> > > > +  2_core-sse2 \
> > > > +  2_core_sse4 \
> > > > +  4_core-sse \
> > > > +  4_core_avx2 \
> > > > +  8_core-avx2 \
> > > > +  8_core_avx512
> > > > +libmvec-multiarch-float-func-list = \
> > > > +  f4_core-sse2 \
> > > > +  f4_core_sse4 \
> > > > +  f8_core-sse \
> > > > +  f8_core_avx2 \
> > > > +  f16_core-avx2 \
> > > > +  f16_core_avx512
> > > > +
> > > > +libmvec-sysdep_routines += \
> > > > +  $(foreach l,$(libmvec-multiarch-double-func-list), \
> > > > +    $(addprefix svml_d_,$(addsuffix $(l),$(libmvec-funcs)))) \
> > > > +  $(foreach l,$(libmvec-multiarch-float-func-list), \
> > > > +    $(addprefix svml_s_,$(addsuffix $(l),$(libmvec-funcs))))
> > > >  endif
> > > > --
> > > > 2.31.1
> > > >
> > >
> > > PING.
> > >
> > > --
> > > H.J.
> >
> > How can I test this patch?
>
> This patch improves libmvec build and test.  Otherwise it should be NFC.
> Sunil has a followup patch to add the rest of libmvec ABI tests.

Err, I meant how can I test this for review.

Build succeeds on x86_64. All tests in mathvec/math pass. As well the
exact same tests run.
If that's sufficient then LGTM.

>
> --
> H.J.

  reply	other threads:[~2021-10-20 18:47 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-15 13:12 H.J. Lu
2021-10-20 16:00 ` PING " H.J. Lu
2021-10-20 18:07   ` Noah Goldstein
2021-10-20 18:18     ` H.J. Lu
2021-10-20 18:47       ` Noah Goldstein [this message]
2021-10-20 18:53         ` H.J. Lu

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='CAFUsyfL0xBUegxtk=ZxnsxLVjCM_YfR+uHzGXVHGZNWQoi9Q1g@mail.gmail.com' \
    --to=goldstein.w.n@gmail.com \
    --cc=hjl.tools@gmail.com \
    --cc=libc-alpha@sourceware.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 read-only IMAP folder(s) and NNTP newsgroup(s).