about summary refs log tree commit diff
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;
+}