summaryrefslogtreecommitdiff
path: root/src/math/x86_64/fabsf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/x86_64/fabsf.c')
-rw-r--r--src/math/x86_64/fabsf.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/math/x86_64/fabsf.c b/src/math/x86_64/fabsf.c
new file mode 100644
index 00000000..36ea7481
--- /dev/null
+++ b/src/math/x86_64/fabsf.c
@@ -0,0 +1,10 @@
+#include <math.h>
+
+float fabsf(float x)
+{
+ float t;
+ __asm__ ("pcmpeqd %0, %0" : "=x"(t)); // t = ~0
+ __asm__ ("psrld $1, %0" : "+x"(t)); // t >>= 1
+ __asm__ ("andps %1, %0" : "+x"(x) : "x"(t)); // x &= t
+ return x;
+}