Browse Source

fix calling convention on win64, mostly passing the numerical tests

Jameson Nash 11 years ago
parent
commit
0cd232d8cf

+ 10 - 0
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
 
 	

+ 8 - 1
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
 
-	

+ 5 - 3
amd64/s_llrint.S

@@ -1,6 +1,8 @@
 #include <amd64/bsd_asm.h>
 //__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)
+

+ 5 - 3
amd64/s_llrintf.S

@@ -1,6 +1,8 @@
 #include <amd64/bsd_asm.h>
 //__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)
+

+ 5 - 1
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
 
-	
+

+ 9 - 0
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
 
 	

+ 6 - 5
amd64/s_lrint.S

@@ -26,14 +26,15 @@
 
 #include <amd64/bsd_asm.h>
 
-#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)
 
 	

+ 6 - 5
amd64/s_lrintf.S

@@ -26,14 +26,15 @@
 
 #include <amd64/bsd_asm.h>
 
-#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)
 
 	

+ 4 - 0
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

+ 4 - 0
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

+ 4 - 0
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

+ 13 - 0
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
 
 	

+ 8 - 0
amd64/s_rintl.S

@@ -7,8 +7,16 @@
 #include <amd64/bsd_asm.h>
 
 ENTRY(rintl)
+#ifndef _WIN64
 	fldt	8(%rsp)
 	frndint
+#else
+    fldt    (%rdx)
+    frndint
+    mov     %rcx,%rax
+    movq    $0x0,0x8(%rcx)
+    fstpt   (%rcx)
+#endif
 	ret
 
 	

+ 4 - 0
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

+ 4 - 0
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

+ 12 - 0
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)