summaryrefslogtreecommitdiff
path: root/src/math/x86_64/fabs.c
blob: 1656247770f778aba56e0620adbc3e8241a3e8ea (plain) (blame)
1
2
3
4
5
6
7
8
9
10
#include <math.h>

double fabs(double x)
{
	double t;
	__asm__ ("pcmpeqd %0, %0" : "=x"(t));          // t = ~0
	__asm__ ("psrlq   $1, %0" : "+x"(t));          // t >>= 1
	__asm__ ("andps   %1, %0" : "+x"(x) : "x"(t)); // x &= t
	return x;
}