aboutsummaryrefslogtreecommitdiff
path: root/src/math/x86_64/fabs.c
blob: aca2f3619925c5d15a0c3afa19c63f6d15d597a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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;
}


#ifdef TEST
int
main(void) {
	return 0;
}
#endif