diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2020-01-06 19:35:57 +0300 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2020-03-24 16:27:38 -0400 |
commit | 41b290ba397067a09525b6ac89b4040728349046 (patch) | |
tree | f640cffb9884e28d0ff62fe27825f53eb32c459a | |
parent | c24a9923863fc29af4a5249727fe800224fc3c44 (diff) | |
download | musl-41b290ba397067a09525b6ac89b4040728349046.tar.gz musl-41b290ba397067a09525b6ac89b4040728349046.tar.bz2 musl-41b290ba397067a09525b6ac89b4040728349046.tar.xz musl-41b290ba397067a09525b6ac89b4040728349046.zip |
math: move trivial x86-family sqrt functions to C with inline asm
-rw-r--r-- | src/math/i386/sqrtl.c | 7 | ||||
-rw-r--r-- | src/math/i386/sqrtl.s | 5 | ||||
-rw-r--r-- | src/math/x86_64/sqrt.c | 7 | ||||
-rw-r--r-- | src/math/x86_64/sqrt.s | 4 | ||||
-rw-r--r-- | src/math/x86_64/sqrtf.c | 7 | ||||
-rw-r--r-- | src/math/x86_64/sqrtf.s | 4 | ||||
-rw-r--r-- | src/math/x86_64/sqrtl.c | 7 | ||||
-rw-r--r-- | src/math/x86_64/sqrtl.s | 5 |
8 files changed, 28 insertions, 18 deletions
diff --git a/src/math/i386/sqrtl.c b/src/math/i386/sqrtl.c new file mode 100644 index 00000000..864cfcc4 --- /dev/null +++ b/src/math/i386/sqrtl.c @@ -0,0 +1,7 @@ +#include <math.h> + +long double sqrtl(long double x) +{ + __asm__ ("fsqrt" : "+t"(x)); + return x; +} diff --git a/src/math/i386/sqrtl.s b/src/math/i386/sqrtl.s deleted file mode 100644 index e0d42616..00000000 --- a/src/math/i386/sqrtl.s +++ /dev/null @@ -1,5 +0,0 @@ -.global sqrtl -.type sqrtl,@function -sqrtl: fldt 4(%esp) - fsqrt - ret diff --git a/src/math/x86_64/sqrt.c b/src/math/x86_64/sqrt.c new file mode 100644 index 00000000..657e09e3 --- /dev/null +++ b/src/math/x86_64/sqrt.c @@ -0,0 +1,7 @@ +#include <math.h> + +double sqrt(double x) +{ + __asm__ ("sqrtsd %1, %0" : "=x"(x) : "x"(x)); + return x; +} diff --git a/src/math/x86_64/sqrt.s b/src/math/x86_64/sqrt.s deleted file mode 100644 index d3c609f9..00000000 --- a/src/math/x86_64/sqrt.s +++ /dev/null @@ -1,4 +0,0 @@ -.global sqrt -.type sqrt,@function -sqrt: sqrtsd %xmm0, %xmm0 - ret diff --git a/src/math/x86_64/sqrtf.c b/src/math/x86_64/sqrtf.c new file mode 100644 index 00000000..720baec6 --- /dev/null +++ b/src/math/x86_64/sqrtf.c @@ -0,0 +1,7 @@ +#include <math.h> + +float sqrtf(float x) +{ + __asm__ ("sqrtss %1, %0" : "=x"(x) : "x"(x)); + return x; +} diff --git a/src/math/x86_64/sqrtf.s b/src/math/x86_64/sqrtf.s deleted file mode 100644 index eec48c60..00000000 --- a/src/math/x86_64/sqrtf.s +++ /dev/null @@ -1,4 +0,0 @@ -.global sqrtf -.type sqrtf,@function -sqrtf: sqrtss %xmm0, %xmm0 - ret diff --git a/src/math/x86_64/sqrtl.c b/src/math/x86_64/sqrtl.c new file mode 100644 index 00000000..864cfcc4 --- /dev/null +++ b/src/math/x86_64/sqrtl.c @@ -0,0 +1,7 @@ +#include <math.h> + +long double sqrtl(long double x) +{ + __asm__ ("fsqrt" : "+t"(x)); + return x; +} diff --git a/src/math/x86_64/sqrtl.s b/src/math/x86_64/sqrtl.s deleted file mode 100644 index 23cd687d..00000000 --- a/src/math/x86_64/sqrtl.s +++ /dev/null @@ -1,5 +0,0 @@ -.global sqrtl -.type sqrtl,@function -sqrtl: fldt 8(%rsp) - fsqrt - ret |