Bladeren bron

fix calling convention on win64, mostly passing the numerical tests

Jameson Nash 12 jaren geleden
bovenliggende
commit
0cd232d8cf
16 gewijzigde bestanden met toevoegingen van 107 en 18 verwijderingen
  1. 10 0
      amd64/e_remainderl.S
  2. 8 1
      amd64/e_sqrtl.S
  3. 5 3
      amd64/s_llrint.S
  4. 5 3
      amd64/s_llrintf.S
  5. 5 1
      amd64/s_llrintl.S
  6. 9 0
      amd64/s_logbl.S
  7. 6 5
      amd64/s_lrint.S
  8. 6 5
      amd64/s_lrintf.S
  9. 4 0
      amd64/s_lrintl.S
  10. 4 0
      amd64/s_remquo.S
  11. 4 0
      amd64/s_remquof.S
  12. 13 0
      amd64/s_remquol.S
  13. 8 0
      amd64/s_rintl.S
  14. 4 0
      amd64/s_scalbn.S
  15. 4 0
      amd64/s_scalbnf.S
  16. 12 0
      amd64/s_scalbnl.S

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