mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] powerpc64le: Add single instruction math functions
@ 2017-06-21 14:53 David Edelsohn
  2017-06-23 19:35 ` Rich Felker
  0 siblings, 1 reply; 23+ messages in thread
From: David Edelsohn @ 2017-06-21 14:53 UTC (permalink / raw)
  To: musl

[-- 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


^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2018-09-27 22:53 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-21 14:53 [PATCH] powerpc64le: Add single instruction math functions David Edelsohn
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

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).