summaryrefslogtreecommitdiff
path: root/src/math/x86_64/fabsf.c
blob: 36ea7481fc402a55075c59b9cbac36b6714712da (plain) (blame)
1
2
3
4
5
6
7
8
9
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;
}