Browse Source

math: move x86_64 (l)lrint(f) functions to C with inline asm

master
Alexander Monakov 6 years ago
committed by Rich Felker
parent
commit
6bbdbfdcde
  1. 8
      src/math/x86_64/llrint.c
  2. 5
      src/math/x86_64/llrint.s
  3. 8
      src/math/x86_64/llrintf.c
  4. 5
      src/math/x86_64/llrintf.s
  5. 8
      src/math/x86_64/lrint.c
  6. 5
      src/math/x86_64/lrint.s
  7. 8
      src/math/x86_64/lrintf.c
  8. 5
      src/math/x86_64/lrintf.s

8
src/math/x86_64/llrint.c

@ -0,0 +1,8 @@
#include <math.h>
long long llrint(double x)
{
long long r;
__asm__ ("cvtsd2si %1, %0" : "=r"(r) : "x"(x));
return r;
}

5
src/math/x86_64/llrint.s

@ -1,5 +0,0 @@
.global llrint
.type llrint,@function
llrint:
cvtsd2si %xmm0,%rax
ret

8
src/math/x86_64/llrintf.c

@ -0,0 +1,8 @@
#include <math.h>
long long llrintf(float x)
{
long long r;
__asm__ ("cvtss2si %1, %0" : "=r"(r) : "x"(x));
return r;
}

5
src/math/x86_64/llrintf.s

@ -1,5 +0,0 @@
.global llrintf
.type llrintf,@function
llrintf:
cvtss2si %xmm0,%rax
ret

8
src/math/x86_64/lrint.c

@ -0,0 +1,8 @@
#include <math.h>
long lrint(double x)
{
long r;
__asm__ ("cvtsd2si %1, %0" : "=r"(r) : "x"(x));
return r;
}

5
src/math/x86_64/lrint.s

@ -1,5 +0,0 @@
.global lrint
.type lrint,@function
lrint:
cvtsd2si %xmm0,%rax
ret

8
src/math/x86_64/lrintf.c

@ -0,0 +1,8 @@
#include <math.h>
long lrintf(float x)
{
long r;
__asm__ ("cvtss2si %1, %0" : "=r"(r) : "x"(x));
return r;
}

5
src/math/x86_64/lrintf.s

@ -1,5 +0,0 @@
.global lrintf
.type lrintf,@function
lrintf:
cvtss2si %xmm0,%rax
ret
Loading…
Cancel
Save