From: David Edelsohn <dje.gcc@gmail.com>
To: musl@lists.openwall.com
Subject: [PATCH] powerpc64le: Add single instruction math functions
Date: Wed, 21 Jun 2017 10:53:13 -0400 [thread overview]
Message-ID: <CAGWvnymr=J9hFw2CLi6MKAMwWdYbQEjz+oQJ1MrexAaygPoSNA@mail.gmail.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 271 bytes --]
The following two patches are a start at single instruction math
functions for PowerPC64 architecture. Although PPC64LE Linux and
ELFv2 ABI require Power8 as the minimum architecture, I have added
guards that fallback to C code for earlier architectures.
Thanks, David
[-- Attachment #2: 0001-Add-single-instruction-math-functions-for-Power8.patch --]
[-- Type: text/x-patch, Size: 8010 bytes --]
From 4eb34b23ba5c9cd932e2ee2fd27fb1f3a6e2f4b0 Mon Sep 17 00:00:00 2001
From: David Edelsohn <dje.gcc@gmail.com>
Date: Fri, 9 Jun 2017 15:40:40 +0000
Subject: [PATCH 1/2] Add single instruction math functions for Power8
---
src/math/powerpc64/ceil.c | 7 +++++++
src/math/powerpc64/ceilf.c | 7 +++++++
src/math/powerpc64/fabs.c | 7 +++++++
src/math/powerpc64/fabsf.c | 7 +++++++
src/math/powerpc64/floor.c | 7 +++++++
src/math/powerpc64/floorf.c | 7 +++++++
src/math/powerpc64/fma.c | 7 +++++++
src/math/powerpc64/fmaf.c | 7 +++++++
src/math/powerpc64/fmax.c | 7 +++++++
src/math/powerpc64/fmaxf.c | 7 +++++++
src/math/powerpc64/fmin.c | 7 +++++++
src/math/powerpc64/fminf.c | 7 +++++++
src/math/powerpc64/lrint.c | 10 ++++++++++
src/math/powerpc64/lrintf.c | 10 ++++++++++
src/math/powerpc64/round.c | 7 +++++++
src/math/powerpc64/roundf.c | 7 +++++++
src/math/powerpc64/sqrt.c | 7 +++++++
src/math/powerpc64/sqrtf.c | 7 +++++++
src/math/powerpc64/trunc.c | 7 +++++++
src/math/powerpc64/truncf.c | 7 +++++++
20 files changed, 146 insertions(+)
create mode 100644 src/math/powerpc64/ceil.c
create mode 100644 src/math/powerpc64/ceilf.c
create mode 100644 src/math/powerpc64/fabs.c
create mode 100644 src/math/powerpc64/fabsf.c
create mode 100644 src/math/powerpc64/floor.c
create mode 100644 src/math/powerpc64/floorf.c
create mode 100644 src/math/powerpc64/fma.c
create mode 100644 src/math/powerpc64/fmaf.c
create mode 100644 src/math/powerpc64/fmax.c
create mode 100644 src/math/powerpc64/fmaxf.c
create mode 100644 src/math/powerpc64/fmin.c
create mode 100644 src/math/powerpc64/fminf.c
create mode 100644 src/math/powerpc64/lrint.c
create mode 100644 src/math/powerpc64/lrintf.c
create mode 100644 src/math/powerpc64/round.c
create mode 100644 src/math/powerpc64/roundf.c
create mode 100644 src/math/powerpc64/sqrt.c
create mode 100644 src/math/powerpc64/sqrtf.c
create mode 100644 src/math/powerpc64/trunc.c
create mode 100644 src/math/powerpc64/truncf.c
diff --git a/src/math/powerpc64/ceil.c b/src/math/powerpc64/ceil.c
new file mode 100644
index 0000000..b2e6d35
--- /dev/null
+++ b/src/math/powerpc64/ceil.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double ceil(double x)
+{
+ __asm__ ("frip %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/ceilf.c b/src/math/powerpc64/ceilf.c
new file mode 100644
index 0000000..97d69c7
--- /dev/null
+++ b/src/math/powerpc64/ceilf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float ceilf(float x)
+{
+ __asm__ ("frip %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/fabs.c b/src/math/powerpc64/fabs.c
new file mode 100644
index 0000000..6123c75
--- /dev/null
+++ b/src/math/powerpc64/fabs.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double fabs(double x)
+{
+ __asm__ ("fabs %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/fabsf.c b/src/math/powerpc64/fabsf.c
new file mode 100644
index 0000000..e9e4564
--- /dev/null
+++ b/src/math/powerpc64/fabsf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float fabsf(float x)
+{
+ __asm__ ("fabs %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/floor.c b/src/math/powerpc64/floor.c
new file mode 100644
index 0000000..d40ba65
--- /dev/null
+++ b/src/math/powerpc64/floor.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double floor(double x)
+{
+ __asm__ ("frim %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/floorf.c b/src/math/powerpc64/floorf.c
new file mode 100644
index 0000000..34ea5ee
--- /dev/null
+++ b/src/math/powerpc64/floorf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float floorf(float x)
+{
+ __asm__ ("frim %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/fma.c b/src/math/powerpc64/fma.c
new file mode 100644
index 0000000..5aebd1a
--- /dev/null
+++ b/src/math/powerpc64/fma.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double fma(double x, double y, double z)
+{
+ __asm__ ("fmadd %0, %1, %2, %3" : "=d"(x) : "d"(x), "d"(y), "d"(z));
+ return x;
+}
diff --git a/src/math/powerpc64/fmaf.c b/src/math/powerpc64/fmaf.c
new file mode 100644
index 0000000..c678fef
--- /dev/null
+++ b/src/math/powerpc64/fmaf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float fmaf(float x, float y, float z)
+{
+ __asm__ ("fmadds %0, %1, %2, %3" : "=f"(x) : "f"(x), "f"(y), "f"(z));
+ return x;
+}
diff --git a/src/math/powerpc64/fmax.c b/src/math/powerpc64/fmax.c
new file mode 100644
index 0000000..a9c507e
--- /dev/null
+++ b/src/math/powerpc64/fmax.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double fmax(double x, double y)
+{
+ __asm__ ("xsmaxdp %x0, %x1, %x2" : "=ws"(x) : "ws"(x), "ws"(y));
+ return x;
+}
diff --git a/src/math/powerpc64/fmaxf.c b/src/math/powerpc64/fmaxf.c
new file mode 100644
index 0000000..f2dbd4b
--- /dev/null
+++ b/src/math/powerpc64/fmaxf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float fmaxf(float x, float y)
+{
+ __asm__ ("xsmaxdp %x0, %x1, %x2" : "=ww"(x) : "ww"(x), "ww"(y));
+ return x;
+}
diff --git a/src/math/powerpc64/fmin.c b/src/math/powerpc64/fmin.c
new file mode 100644
index 0000000..62504d6
--- /dev/null
+++ b/src/math/powerpc64/fmin.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double fmin(double x, double y)
+{
+ __asm__ ("xsmindp %x0, %x1, %x2" : "=ws"(x) : "ws"(x), "ws"(y));
+ return x;
+}
diff --git a/src/math/powerpc64/fminf.c b/src/math/powerpc64/fminf.c
new file mode 100644
index 0000000..4d19262
--- /dev/null
+++ b/src/math/powerpc64/fminf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float fminf(float x, float y)
+{
+ __asm__ ("xsmindp %x0, %x1, %x2" : "=ww"(x) : "ww"(x), "ww"(y));
+ return x;
+}
diff --git a/src/math/powerpc64/lrint.c b/src/math/powerpc64/lrint.c
new file mode 100644
index 0000000..3e5269d
--- /dev/null
+++ b/src/math/powerpc64/lrint.c
@@ -0,0 +1,10 @@
+#include <math.h>
+
+long lrint(double x)
+{
+ long n;
+ __asm__ (
+ "fctid %1, %1\n"
+ "mfvsrd %0, %1\n" : "=r"(n), "+d"(x));
+ return n;
+}
diff --git a/src/math/powerpc64/lrintf.c b/src/math/powerpc64/lrintf.c
new file mode 100644
index 0000000..2db1a5e
--- /dev/null
+++ b/src/math/powerpc64/lrintf.c
@@ -0,0 +1,10 @@
+#include <math.h>
+
+long lrintf(float x)
+{
+ long n;
+ __asm__ (
+ "fctid %1, %1\n"
+ "mfvsrd %0, %1\n" : "=r"(n), "+f"(x));
+ return n;
+}
diff --git a/src/math/powerpc64/round.c b/src/math/powerpc64/round.c
new file mode 100644
index 0000000..ea396d9
--- /dev/null
+++ b/src/math/powerpc64/round.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double round(double x)
+{
+ __asm__ ("frin %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/roundf.c b/src/math/powerpc64/roundf.c
new file mode 100644
index 0000000..15c3439
--- /dev/null
+++ b/src/math/powerpc64/roundf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float roundf(float x)
+{
+ __asm__ ("frin %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/sqrt.c b/src/math/powerpc64/sqrt.c
new file mode 100644
index 0000000..13bb98d
--- /dev/null
+++ b/src/math/powerpc64/sqrt.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double sqrt(double x)
+{
+ __asm__ ("fsqrt %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/sqrtf.c b/src/math/powerpc64/sqrtf.c
new file mode 100644
index 0000000..b6ecb10
--- /dev/null
+++ b/src/math/powerpc64/sqrtf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float sqrtf(float x)
+{
+ __asm__ ("fsqrts %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/trunc.c b/src/math/powerpc64/trunc.c
new file mode 100644
index 0000000..abd3048
--- /dev/null
+++ b/src/math/powerpc64/trunc.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+double trunc(double x)
+{
+ __asm__ ("friz %0, %1" : "=d"(x) : "d"(x));
+ return x;
+}
diff --git a/src/math/powerpc64/truncf.c b/src/math/powerpc64/truncf.c
new file mode 100644
index 0000000..3cd0e84
--- /dev/null
+++ b/src/math/powerpc64/truncf.c
@@ -0,0 +1,7 @@
+#include <math.h>
+
+float truncf(float x)
+{
+ __asm__ ("friz %0, %1" : "=f"(x) : "f"(x));
+ return x;
+}
--
1.8.3.1
[-- Attachment #3: 0002-Add-lround-implementations.patch --]
[-- Type: text/x-patch, Size: 7211 bytes --]
From f15e7f41ac8c557516503343f8284f25e954dd9d Mon Sep 17 00:00:00 2001
From: David Edelsohn <dje.gcc@gmail.com>
Date: Wed, 21 Jun 2017 14:32:34 +0000
Subject: [PATCH 2/2] Add lround implementations. Protect implementations with
fallback for older architectures.
---
src/math/powerpc64/ceil.c | 8 ++++++++
src/math/powerpc64/ceilf.c | 8 ++++++++
src/math/powerpc64/floor.c | 8 ++++++++
src/math/powerpc64/floorf.c | 8 ++++++++
src/math/powerpc64/fmax.c | 8 ++++++++
src/math/powerpc64/fmaxf.c | 8 ++++++++
src/math/powerpc64/fmin.c | 8 ++++++++
src/math/powerpc64/fminf.c | 8 ++++++++
src/math/powerpc64/lrint.c | 12 +++++++++---
src/math/powerpc64/lrintf.c | 12 +++++++++---
src/math/powerpc64/lround.c | 18 ++++++++++++++++++
src/math/powerpc64/lroundf.c | 18 ++++++++++++++++++
src/math/powerpc64/round.c | 8 ++++++++
src/math/powerpc64/roundf.c | 8 ++++++++
src/math/powerpc64/trunc.c | 8 ++++++++
src/math/powerpc64/truncf.c | 8 ++++++++
16 files changed, 150 insertions(+), 6 deletions(-)
create mode 100644 src/math/powerpc64/lround.c
create mode 100644 src/math/powerpc64/lroundf.c
diff --git a/src/math/powerpc64/ceil.c b/src/math/powerpc64/ceil.c
index b2e6d35..4b01133 100644
--- a/src/math/powerpc64/ceil.c
+++ b/src/math/powerpc64/ceil.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
double ceil(double x)
{
__asm__ ("frip %0, %1" : "=d"(x) : "d"(x));
return x;
}
+
+#else
+
+#include "../ceil.c"
+
+#endif
diff --git a/src/math/powerpc64/ceilf.c b/src/math/powerpc64/ceilf.c
index 97d69c7..59ba396 100644
--- a/src/math/powerpc64/ceilf.c
+++ b/src/math/powerpc64/ceilf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
float ceilf(float x)
{
__asm__ ("frip %0, %1" : "=f"(x) : "f"(x));
return x;
}
+
+#else
+
+#include "../ceilf.c"
+
+#endif
diff --git a/src/math/powerpc64/floor.c b/src/math/powerpc64/floor.c
index d40ba65..4e68044 100644
--- a/src/math/powerpc64/floor.c
+++ b/src/math/powerpc64/floor.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
double floor(double x)
{
__asm__ ("frim %0, %1" : "=d"(x) : "d"(x));
return x;
}
+
+#else
+
+#include "../floor.c"
+
+#endif
diff --git a/src/math/powerpc64/floorf.c b/src/math/powerpc64/floorf.c
index 34ea5ee..e1031ef 100644
--- a/src/math/powerpc64/floorf.c
+++ b/src/math/powerpc64/floorf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
float floorf(float x)
{
__asm__ ("frim %0, %1" : "=f"(x) : "f"(x));
return x;
}
+
+#else
+
+#include "../floorf.c"
+
+#endif
diff --git a/src/math/powerpc64/fmax.c b/src/math/powerpc64/fmax.c
index a9c507e..992df7f 100644
--- a/src/math/powerpc64/fmax.c
+++ b/src/math/powerpc64/fmax.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef __VSX__
+
double fmax(double x, double y)
{
__asm__ ("xsmaxdp %x0, %x1, %x2" : "=ws"(x) : "ws"(x), "ws"(y));
return x;
}
+
+#else
+
+#include "../fmax.c"
+
+#endif
diff --git a/src/math/powerpc64/fmaxf.c b/src/math/powerpc64/fmaxf.c
index f2dbd4b..345a234 100644
--- a/src/math/powerpc64/fmaxf.c
+++ b/src/math/powerpc64/fmaxf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef __VSX__
+
float fmaxf(float x, float y)
{
__asm__ ("xsmaxdp %x0, %x1, %x2" : "=ww"(x) : "ww"(x), "ww"(y));
return x;
}
+
+#else
+
+#include "../fmaxf.c"
+
+#endif
diff --git a/src/math/powerpc64/fmin.c b/src/math/powerpc64/fmin.c
index 62504d6..adf71ba 100644
--- a/src/math/powerpc64/fmin.c
+++ b/src/math/powerpc64/fmin.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef __VSX__
+
double fmin(double x, double y)
{
__asm__ ("xsmindp %x0, %x1, %x2" : "=ws"(x) : "ws"(x), "ws"(y));
return x;
}
+
+#else
+
+#include "../fmin.c"
+
+#endif
diff --git a/src/math/powerpc64/fminf.c b/src/math/powerpc64/fminf.c
index 4d19262..faf0e47 100644
--- a/src/math/powerpc64/fminf.c
+++ b/src/math/powerpc64/fminf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef __VSX__
+
float fminf(float x, float y)
{
__asm__ ("xsmindp %x0, %x1, %x2" : "=ww"(x) : "ww"(x), "ww"(y));
return x;
}
+
+#else
+
+#include "../fminf.c"
+
+#endif
diff --git a/src/math/powerpc64/lrint.c b/src/math/powerpc64/lrint.c
index 3e5269d..4e4b2e0 100644
--- a/src/math/powerpc64/lrint.c
+++ b/src/math/powerpc64/lrint.c
@@ -1,10 +1,16 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
long lrint(double x)
{
long n;
- __asm__ (
- "fctid %1, %1\n"
- "mfvsrd %0, %1\n" : "=r"(n), "+d"(x));
+ __asm__ ("fctid %0, %1" : "=d"(n) : "d"(x));
return n;
}
+
+#else
+
+#include "../lrint.c"
+
+#endif
diff --git a/src/math/powerpc64/lrintf.c b/src/math/powerpc64/lrintf.c
index 2db1a5e..9070fc0 100644
--- a/src/math/powerpc64/lrintf.c
+++ b/src/math/powerpc64/lrintf.c
@@ -1,10 +1,16 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
long lrintf(float x)
{
long n;
- __asm__ (
- "fctid %1, %1\n"
- "mfvsrd %0, %1\n" : "=r"(n), "+f"(x));
+ __asm__ ("fctid %0, %1" : "=d"(n) : "f"(x));
return n;
}
+
+#else
+
+#include "../lrintf.c"
+
+#endif
diff --git a/src/math/powerpc64/lround.c b/src/math/powerpc64/lround.c
new file mode 100644
index 0000000..ee4d114
--- /dev/null
+++ b/src/math/powerpc64/lround.c
@@ -0,0 +1,18 @@
+#include <math.h>
+
+#ifdef __VSX__
+
+long lround(double x)
+{
+ long n;
+ __asm__ (
+ "xsrdpi %1, %1\n"
+ "fctid %0, %1\n" : "=d"(n), "+d"(x));
+ return n;
+}
+
+#else
+
+#include "../lround.c"
+
+#endif
diff --git a/src/math/powerpc64/lroundf.c b/src/math/powerpc64/lroundf.c
new file mode 100644
index 0000000..033094f
--- /dev/null
+++ b/src/math/powerpc64/lroundf.c
@@ -0,0 +1,18 @@
+#include <math.h>
+
+#ifdef __VSX__
+
+long lroundf(float x)
+{
+ long n;
+ __asm__ (
+ "xsrdpi %1, %1\n"
+ "fctid %0, %1\n" : "=d"(n), "+f"(x));
+ return n;
+}
+
+#else
+
+#include "../lroundf.c"
+
+#endif
diff --git a/src/math/powerpc64/round.c b/src/math/powerpc64/round.c
index ea396d9..4b9318e 100644
--- a/src/math/powerpc64/round.c
+++ b/src/math/powerpc64/round.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
double round(double x)
{
__asm__ ("frin %0, %1" : "=d"(x) : "d"(x));
return x;
}
+
+#else
+
+#include "../round.c"
+
+#endif
diff --git a/src/math/powerpc64/roundf.c b/src/math/powerpc64/roundf.c
index 15c3439..ae93f99 100644
--- a/src/math/powerpc64/roundf.c
+++ b/src/math/powerpc64/roundf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
float roundf(float x)
{
__asm__ ("frin %0, %1" : "=f"(x) : "f"(x));
return x;
}
+
+#else
+
+#include "../roundf.c"
+
+#endif
diff --git a/src/math/powerpc64/trunc.c b/src/math/powerpc64/trunc.c
index abd3048..5791854 100644
--- a/src/math/powerpc64/trunc.c
+++ b/src/math/powerpc64/trunc.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
double trunc(double x)
{
__asm__ ("friz %0, %1" : "=d"(x) : "d"(x));
return x;
}
+
+#else
+
+#include "../trunc.c"
+
+#endif
diff --git a/src/math/powerpc64/truncf.c b/src/math/powerpc64/truncf.c
index 3cd0e84..94e638f 100644
--- a/src/math/powerpc64/truncf.c
+++ b/src/math/powerpc64/truncf.c
@@ -1,7 +1,15 @@
#include <math.h>
+#ifdef _ARCH_PWR5X
+
float truncf(float x)
{
__asm__ ("friz %0, %1" : "=f"(x) : "f"(x));
return x;
}
+
+#else
+
+#include "../truncf.c"
+
+#endif
--
1.8.3.1
next reply other threads:[~2017-06-21 14:53 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-21 14:53 David Edelsohn [this message]
2017-06-23 19:35 ` Rich Felker
2017-06-23 19:53 ` David Edelsohn
2017-06-24 0:46 ` A. Wilcox
2017-06-24 0:55 ` Rich Felker
2017-06-24 3:05 ` David Edelsohn
2017-06-24 3:32 ` Rich Felker
2017-06-24 3:38 ` A. Wilcox
2017-06-24 20:53 ` David Edelsohn
2017-06-24 22:44 ` Rich Felker
2017-06-24 23:57 ` A. Wilcox
2017-06-25 0:10 ` Rich Felker
2017-06-25 1:41 ` Rich Felker
2017-06-29 13:49 ` David Edelsohn
2017-06-29 16:05 ` Rich Felker
2017-06-29 17:00 ` David Edelsohn
2017-06-29 17:59 ` Rich Felker
2017-06-30 1:07 ` David Edelsohn
2017-06-30 2:11 ` Rich Felker
2017-06-25 3:24 ` David Edelsohn
2017-06-25 14:28 ` Rich Felker
2017-06-25 14:56 ` David Edelsohn
2018-09-27 22:53 ` A. Wilcox
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='CAGWvnymr=J9hFw2CLi6MKAMwWdYbQEjz+oQJ1MrexAaygPoSNA@mail.gmail.com' \
--to=dje.gcc@gmail.com \
--cc=musl@lists.openwall.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.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
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).