diff --git a/amd64/e_remainderl.S b/amd64/e_remainderl.S index 72150e5..0b5b7eb 100644 --- a/amd64/e_remainderl.S +++ b/amd64/e_remainderl.S @@ -9,13 +9,23 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/e_remainderl.S,v 1.2 2011/01/07 16:13:12 kib Exp $") ENTRY(remainderl) +#ifndef _WIN64 fldt 24(%rsp) fldt 8(%rsp) +#else + fldt (%r8) + fldt (%rdx) +#endif 1: fprem1 fstsw %ax testw $0x400,%ax jne 1b fstp %st(1) +#ifdef _WIN64 + mov %rcx,%rax + movq $0x0,0x8(%rcx) + fstpt (%rcx) +#endif ret diff --git a/amd64/e_sqrtl.S b/amd64/e_sqrtl.S index 17275c4..8489643 100644 --- a/amd64/e_sqrtl.S +++ b/amd64/e_sqrtl.S @@ -28,8 +28,15 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/e_sqrtl.S,v 1.2 2011/01/07 16:13:12 kib Exp $") ENTRY(sqrtl) +#ifndef _WIN64 fldt 8(%rsp) fsqrt +#else + fldt (%rdx) + fsqrt + mov %rcx,%rax + movq $0x0,0x8(%rcx) + fstpt (%rcx) +#endif ret - diff --git a/amd64/s_llrint.S b/amd64/s_llrint.S index 5ef4be4..74003f4 100644 --- a/amd64/s_llrint.S +++ b/amd64/s_llrint.S @@ -1,6 +1,8 @@ #include //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrint.S,v 1.3 2011/02/04 21:54:06 kib Exp $") -/* sizeof(long) == sizeof(long long) */ -#define fn llrint -#include "s_lrint.S" +ENTRY(llrint) + cvtsd2si %xmm0, %rax + ret +END(llrint) + diff --git a/amd64/s_llrintf.S b/amd64/s_llrintf.S index a7e1c57..8d11602 100644 --- a/amd64/s_llrintf.S +++ b/amd64/s_llrintf.S @@ -1,6 +1,8 @@ #include //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrintf.S,v 1.3 2011/02/04 21:54:06 kib Exp $") -/* sizeof(long) == sizeof(long long) */ -#define fn llrintf -#include "s_lrintf.S" +ENTRY(llrintf) + cvtss2si %xmm0, %rax + ret +END(llrintf) + diff --git a/amd64/s_llrintl.S b/amd64/s_llrintl.S index 07e9c3a..6f50ea5 100644 --- a/amd64/s_llrintl.S +++ b/amd64/s_llrintl.S @@ -28,10 +28,14 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_llrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $"); ENTRY(llrintl) +#ifndef _WIN64 fldt 8(%rsp) +#else + fldt (%rcx) +#endif subq $8,%rsp fistpll (%rsp) popq %rax ret - + diff --git a/amd64/s_logbl.S b/amd64/s_logbl.S index 93bd3f1..830b79c 100644 --- a/amd64/s_logbl.S +++ b/amd64/s_logbl.S @@ -8,9 +8,18 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_logbl.S,v 1.4 2011/01/07 16:13:12 kib Exp $") ENTRY(logbl) +#ifndef _WIN64 fldt 8(%rsp) +#else + fldt (%rdx) +#endif fxtract fstp %st +#ifdef _WIN64 + mov %rcx,%rax + movq $0x0,0x8(%rcx) + fstpt (%rcx) +#endif ret diff --git a/amd64/s_lrint.S b/amd64/s_lrint.S index 2f36245..0549c05 100644 --- a/amd64/s_lrint.S +++ b/amd64/s_lrint.S @@ -26,14 +26,15 @@ #include -#ifndef fn //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrint.S,v 1.3 2011/01/07 16:13:12 kib Exp $") -#define fn lrint -#endif -ENTRY(fn) +ENTRY(lrint) +#ifndef _WIN64 cvtsd2si %xmm0, %rax +#else + cvtsd2si %xmm0, %eax +#endif ret -END(fn) +END(lrint) diff --git a/amd64/s_lrintf.S b/amd64/s_lrintf.S index d6798a5..8fe6d5e 100644 --- a/amd64/s_lrintf.S +++ b/amd64/s_lrintf.S @@ -26,14 +26,15 @@ #include -#ifndef fn //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrintf.S,v 1.3 2011/01/07 16:13:12 kib Exp $") -#define fn lrintf -#endif -ENTRY(fn) +ENTRY(lrintf) +#ifndef _WIN64 cvtss2si %xmm0, %rax +#else + cvtss2si %xmm0, %eax +#endif ret -END(fn) +END(lrintf) diff --git a/amd64/s_lrintl.S b/amd64/s_lrintl.S index 9f4e47c..90708e6 100644 --- a/amd64/s_lrintl.S +++ b/amd64/s_lrintl.S @@ -28,7 +28,11 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_lrintl.S,v 1.2 2011/01/07 16:13:12 kib Exp $"); ENTRY(lrintl) +#ifndef _WIN64 fldt 8(%rsp) +#else + fldt (%rcx) +#endif subq $8,%rsp fistpll (%rsp) popq %rax diff --git a/amd64/s_remquo.S b/amd64/s_remquo.S index a54a96f..632ad52 100644 --- a/amd64/s_remquo.S +++ b/amd64/s_remquo.S @@ -59,7 +59,11 @@ ENTRY(remquo) andl $1,%ecx addl %ecx,%eax /* Store the quotient and return. */ +#ifndef _WIN64 movl %eax,(%rdi) +#else + movl %eax,(%r8) +#endif fstpl -8(%rsp) movsd -8(%rsp),%xmm0 ret diff --git a/amd64/s_remquof.S b/amd64/s_remquof.S index e9e38af..55e797c 100644 --- a/amd64/s_remquof.S +++ b/amd64/s_remquof.S @@ -59,7 +59,11 @@ ENTRY(remquof) andl $1,%ecx addl %ecx,%eax /* Store the quotient and return. */ +#ifndef _WIN64 movl %eax,(%rdi) +#else + movl %eax,(%r8) +#endif fstps -4(%rsp) movss -4(%rsp),%xmm0 ret diff --git a/amd64/s_remquol.S b/amd64/s_remquol.S index 316a7e4..afdb3ad 100644 --- a/amd64/s_remquol.S +++ b/amd64/s_remquol.S @@ -32,8 +32,14 @@ //__FBSDID("$FreeBSD: src/lib/msun/amd64/s_remquol.S,v 1.2 2011/01/07 16:13:12 kib Exp $"); ENTRY(remquol) +#ifndef _WIN64 fldt 24(%rsp) fldt 8(%rsp) +#else + fldt (%r8) + fldt (%rdx) + mov %rcx,%r8 +#endif 1: fprem1 fstsw %ax btw $10,%ax @@ -58,7 +64,14 @@ ENTRY(remquol) andl $1,%ecx addl %ecx,%eax /* Store the quotient and return. */ +#ifndef _WIN64 movl %eax,(%rdi) +#else + movl %eax,(%r9) + mov %r8,%rax + movq $0x0,0x8(%r8) + fstpt (%r8) +#endif ret diff --git a/amd64/s_rintl.S b/amd64/s_rintl.S index 98bd20e..f6d9c7f 100644 --- a/amd64/s_rintl.S +++ b/amd64/s_rintl.S @@ -7,8 +7,16 @@ #include ENTRY(rintl) +#ifndef _WIN64 fldt 8(%rsp) frndint +#else + fldt (%rdx) + frndint + mov %rcx,%rax + movq $0x0,0x8(%rcx) + fstpt (%rcx) +#endif ret diff --git a/amd64/s_scalbn.S b/amd64/s_scalbn.S index 9673ec0..c5e496d 100644 --- a/amd64/s_scalbn.S +++ b/amd64/s_scalbn.S @@ -29,7 +29,11 @@ ENTRY(scalbn) movsd %xmm0,-8(%rsp) +#ifndef _WIN64 movl %edi,-12(%rsp) +#else + movl %edx,-12(%rsp) +#endif fildl -12(%rsp) fldl -8(%rsp) fscale diff --git a/amd64/s_scalbnf.S b/amd64/s_scalbnf.S index a19850c..d9ebb6b 100644 --- a/amd64/s_scalbnf.S +++ b/amd64/s_scalbnf.S @@ -29,7 +29,11 @@ ENTRY(scalbnf) movss %xmm0,-8(%rsp) +#ifndef _WIN64 movl %edi,-4(%rsp) +#else + movl %edx,-4(%rsp) +#endif fildl -4(%rsp) flds -8(%rsp) fscale diff --git a/amd64/s_scalbnl.S b/amd64/s_scalbnl.S index 7b38b0f..3743455 100644 --- a/amd64/s_scalbnl.S +++ b/amd64/s_scalbnl.S @@ -8,11 +8,23 @@ /* //RCSID("$NetBSD: s_scalbnf.S,v 1.4 1999/01/02 05:15:40 kristerw Exp $") */ ENTRY(scalbnl) +#ifndef _WIN64 movl %edi,-4(%rsp) fildl -4(%rsp) fldt 8(%rsp) +#else + mov %r8,%rax + movl %eax,-4(%rsp) + fildl -4(%rsp) + fldt (%rdx) +#endif fscale fstp %st(1) +#ifdef _WIN64 + mov %rcx,%rax + movq $0x0,0x8(%rcx) + fstpt (%rcx) +#endif ret END(scalbnl)