Please review, i'll split it up and commit it.
Index: mingw-w64-headers/crt/intrin.h
===================================================================
--- mingw-w64-headers/crt/intrin.h	(Revision 6627)
+++ mingw-w64-headers/crt/intrin.h	(Arbeitskopie)
@@ -1057,7 +1057,7 @@
     /* __MACHINEI(__MINGW_EXTENSION unsigned __int64 __readmsr(unsigned __LONG32)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEI(__MINGW_EXTENSION void __writemsr(unsigned __LONG32,unsigned __int64)) moved to psdk_inc/intrin-impl.h */
 #ifndef __GNUC__
-    __MACHINEI(__MINGW_EXTENSION unsigned __int64 __rdtsc(void))
+    __MACHINEIW64(__MINGW_EXTENSION unsigned __int64 __rdtsc(void))
 #endif
     /* __MACHINEI(void __movsb(unsigned char *,unsigned char const *,size_t)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEI(void __movsw(unsigned short *,unsigned short const *,size_t)) moved to psdk_inc/intrin-impl.h */
Index: mingw-w64-crt/math/trunc.S
===================================================================
--- mingw-w64-crt/math/trunc.S	(Revision 6627)
+++ mingw-w64-crt/math/trunc.S	(Arbeitskopie)
@@ -8,14 +8,14 @@
 	.file "trunc.S"
 	.text
 	.p2align 4,,15
-.globl __MINGW_USYMBOL(trunc)
+	.globl __MINGW_USYMBOL(trunc)
         .def    __MINGW_USYMBOL(trunc);  .scl    2;      .type   32;     .endef
 
 #ifdef _WIN64
 	.seh_proc __MINGW_USYMBOL(trunc)
 #endif
 __MINGW_USYMBOL(trunc):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	subq	$24, %rsp
 	.seh_stackalloc	24
 	.seh_endprologue
@@ -75,7 +75,15 @@
 	addq	$24, %rsp
 	ret
 	.seh_endproc
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	orr		r0, r1, #0x00c00000 /* Round towards Zero */
+	vmsr	fpscr, r0
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldl    4(%esp)
 	subl	$8, %esp
 	fstcw	(%esp)
Index: mingw-w64-crt/math/nearbyint.S
===================================================================
--- mingw-w64-crt/math/nearbyint.S	(Revision 6627)
+++ mingw-w64-crt/math/nearbyint.S	(Arbeitskopie)
@@ -12,10 +12,10 @@
 #else
 	.align 4
 #endif
-.globl __MINGW_USYMBOL(nearbyint)
+	.globl __MINGW_USYMBOL(nearbyint)
 	.def	__MINGW_USYMBOL(nearbyint);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyint):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	movsd	%xmm0,-16(%rsp)
 	fldl	-16(%rsp)
 	pushq	%rax
@@ -33,7 +33,11 @@
 	fstpl	-16(%rsp)
 	movsd	-16(%rsp),%xmm0
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldl	4(%esp)
 	pushl	%eax
 	pushl	%ecx
Index: mingw-w64-crt/math/floorl.S
===================================================================
--- mingw-w64-crt/math/floorl.S	(Revision 6627)
+++ mingw-w64-crt/math/floorl.S	(Arbeitskopie)
@@ -12,10 +12,10 @@
 #else
 	.align 4
 #endif
-.globl __MINGW_USYMBOL(floorl)
+	.globl __MINGW_USYMBOL(floorl)
 	.def	__MINGW_USYMBOL(floorl);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(floorl):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	fldt	(%rdx)
 	subq	$24,%rsp
 
@@ -39,7 +39,16 @@
 	movq	$0,8(%rcx)
 	fstpt	(%rcx)
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00800000 /* Round towards Minus Infinity */
+	vmsr	fpscr, r0
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldt	4(%esp)
 	subl	$8,%esp
 
Index: mingw-w64-crt/math/ceill.S
===================================================================
--- mingw-w64-crt/math/ceill.S	(Revision 6627)
+++ mingw-w64-crt/math/ceill.S	(Arbeitskopie)
@@ -12,10 +12,10 @@
 #else
 	.align 4
 #endif
-.globl __MINGW_USYMBOL(ceill)
+	.globl __MINGW_USYMBOL(ceill)
 	.def	__MINGW_USYMBOL(ceill);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(ceill):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	fldt	(%rdx)
 	subq	$24,%rsp
 
@@ -39,7 +39,16 @@
 	movq	$0,8(%rcx)
 	fstpt	(%rcx)
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00400000 /* Round towards Plus Infinity */
+	vmsr	fpscr, r0
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldt	4(%esp)
 	subl	$8,%esp
 	fstcw	4(%esp)
Index: mingw-w64-crt/math/copysignl.S
===================================================================
--- mingw-w64-crt/math/copysignl.S	(Revision 6627)
+++ mingw-w64-crt/math/copysignl.S	(Arbeitskopie)
@@ -18,10 +18,10 @@
 	.align 4
 #endif
 
-.globl __MINGW_USYMBOL(copysignl)
+	.globl __MINGW_USYMBOL(copysignl)
 	.def	__MINGW_USYMBOL(copysignl);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(copysignl):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	movq	(%rdx), %rax
 	movq	%rax, (%rcx)
 	movq	8(%rdx), %rax
@@ -32,7 +32,19 @@
 	movq	%rax, 8(%rcx)
 	movq	%rcx, %rax
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	fcmpzd	d1
+	fmstat
+	bmi	1f /* jump if d1 is negative */
+	fcmpzd	d0
+	fmstat
+	vnegmi.f64	d0, d0 /* negate d0 if it is negative */
+	bx	lr
+	1: fcmpzd	d0
+	fmstat
+	vnegpl.f64	d0, d0 /* negate d0 if it is positive */
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	movl	24(%esp),%edx
 	movl	12(%esp),%eax
 	andl	$0x8000,%edx
Index: mingw-w64-crt/math/fma.S
===================================================================
--- mingw-w64-crt/math/fma.S	(Revision 6627)
+++ mingw-w64-crt/math/fma.S	(Arbeitskopie)
@@ -13,10 +13,10 @@
 	.align 4
 #endif
 	.p2align 4,,15
-.globl __MINGW_USYMBOL(fma)
+	.globl __MINGW_USYMBOL(fma)
 	.def	__MINGW_USYMBOL(fma);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(fma):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	subq	$56, %rsp
 	movsd	%xmm0,(%rsp)
 	movsd	%xmm1,16(%rsp)
@@ -29,7 +29,11 @@
 	movsd	(%rsp),%xmm0
 	addq	$56, %rsp
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	fmacd d2, d0, d1
+	fcpyd d0, d2
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldl	4(%esp)
 	fmull	12(%esp)
 	fldl	20(%esp)
Index: mingw-w64-crt/math/floor.S
===================================================================
--- mingw-w64-crt/math/floor.S	(Revision 6627)
+++ mingw-w64-crt/math/floor.S	(Arbeitskopie)
@@ -8,13 +8,13 @@
 	.file	"floor.S"
 	.text
 	.p2align 4,,15
-.globl __MINGW_USYMBOL(floor)
+	.globl __MINGW_USYMBOL(floor)
 	.def	__MINGW_USYMBOL(floor);	.scl	2;	.type	32;	.endef
 #ifdef _WIN64
 	.seh_proc __MINGW_USYMBOL(floor)
 #endif
 __MINGW_USYMBOL(floor):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	pushq	%rbx
 	.seh_pushreg	%rbx
 	subq	$16, %rsp
@@ -143,7 +143,16 @@
 .hugeval:
 	.long	-2013235812
 	.long	2117592124
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00800000 /* Round towards Minus Infinity */
+	vmsr	fpscr, r0
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldl	4(%esp)
 	subl	$8,%esp
 
Index: mingw-w64-crt/math/floorf.S
===================================================================
--- mingw-w64-crt/math/floorf.S	(Revision 6627)
+++ mingw-w64-crt/math/floorf.S	(Arbeitskopie)
@@ -8,13 +8,13 @@
 	.file	"floorf.S"
 	.text
 	.p2align 4,,15
-.globl __MINGW_USYMBOL(floorf)
+	.globl __MINGW_USYMBOL(floorf)
 	.def	__MINGW_USYMBOL(floorf);	.scl	2;	.type	32;	.endef
 #ifdef _WIN64
 	.seh_proc __MINGW_USYMBOL(floorf)
 #endif
 __MINGW_USYMBOL(floorf):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
         subq    $40, %rsp
         .seh_stackalloc 40
         .seh_endprologue
@@ -27,7 +27,16 @@
         ret
         .seh_endproc
         .def    __MINGW_USYMBOL(floor);  .scl    2;      .type   32;     .endef
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00800000 /* Round towards Minus Infinity */
+	vmsr	fpscr, r0
+	vcvt.s32.f32	s0, s0
+	vcvt.f32.s32	s0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	flds	4(%esp)
 	subl	$8,%esp
 
Index: mingw-w64-crt/math/nearbyintl.S
===================================================================
--- mingw-w64-crt/math/nearbyintl.S	(Revision 6627)
+++ mingw-w64-crt/math/nearbyintl.S	(Arbeitskopie)
@@ -12,10 +12,10 @@
 #else
 	.align 4
 #endif
-.globl __MINGW_USYMBOL(nearbyintl)
+	.globl __MINGW_USYMBOL(nearbyintl)
 	.def	__MINGW_USYMBOL(nearbyintl);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyintl):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	fldt	(%rdx)
 	movq	%rcx,%r8
 	pushq	%rax
@@ -34,7 +34,11 @@
 	movq	$0,8(%r8)
 	fstpt	(%r8)
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldt	4(%esp)
 	pushl	%eax
 	pushl	%ecx
Index: mingw-w64-crt/math/fmaf.S
===================================================================
--- mingw-w64-crt/math/fmaf.S	(Revision 6627)
+++ mingw-w64-crt/math/fmaf.S	(Arbeitskopie)
@@ -13,10 +13,10 @@
 	.align 2
 #endif
 	.p2align 4,,15
-.globl __MINGW_USYMBOL(fmaf)
+	.globl __MINGW_USYMBOL(fmaf)
 	.def	__MINGW_USYMBOL(fmaf);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(fmaf):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	subq	$56, %rsp
 	movss	%xmm0,(%rsp)
 	movss	%xmm1,16(%rsp)
@@ -29,7 +29,11 @@
 	movss	(%rsp),%xmm0
 	addq	$56, %rsp
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	fmacs s2, s0, s1
+	fcpys s0, s2
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	flds	4(%esp)
 	fmuls	8(%esp)
 	flds	12(%esp)
Index: mingw-w64-crt/math/ceilf.S
===================================================================
--- mingw-w64-crt/math/ceilf.S	(Revision 6627)
+++ mingw-w64-crt/math/ceilf.S	(Arbeitskopie)
@@ -8,14 +8,14 @@
 	.file	"ceilf.S"
 	.text
 	.align 4
-.globl __MINGW_USYMBOL(ceilf)
+	.globl __MINGW_USYMBOL(ceilf)
 	.def	__MINGW_USYMBOL(ceilf);	.scl	2;	.type	32;	.endef
 #ifdef _WIN64
 	.seh_proc	__MINGW_USYMBOL(ceilf)
 #endif
 
 __MINGW_USYMBOL(ceilf):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
         subq    $24, %rsp
         .seh_stackalloc 24
         .seh_endprologue
@@ -87,7 +87,16 @@
         .align 4
 .zeroval:
         .long   0
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00400000 /* Round towards Plus Infinity */
+	vmsr	fpscr, r0
+	vcvt.s32.f32	s0, s0
+	vcvt.f32.s32	s0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	flds	4(%esp)
 	subl	$8,%esp
 
Index: mingw-w64-crt/math/truncf.S
===================================================================
--- mingw-w64-crt/math/truncf.S	(Revision 6627)
+++ mingw-w64-crt/math/truncf.S	(Arbeitskopie)
@@ -8,14 +8,14 @@
         .file "truncf.S"
         .text
         .p2align 4,,15
-.globl __MINGW_USYMBOL(truncf)
+        .globl __MINGW_USYMBOL(truncf)
         .def    __MINGW_USYMBOL(truncf);  .scl    2;      .type   32;     .endef
 
 #ifdef _WIN64
         .seh_proc __MINGW_USYMBOL(truncf)
 #endif
 __MINGW_USYMBOL(truncf):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	subq	$24, %rsp
 	.seh_stackalloc	24
 	.seh_endprologue
@@ -55,7 +55,15 @@
 	addq	$24, %rsp
 	ret
 	.seh_endproc
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	orr		r0, r1, #0x00c00000 /* Round towards Zero */
+	vmsr	fpscr, r0
+	vcvt.s32.f32	s0, s0
+	vcvt.f32.s32	s0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
         flds    4(%esp)
         subl    $8, %esp
         fstcw   (%esp)
Index: mingw-w64-crt/math/nearbyintf.S
===================================================================
--- mingw-w64-crt/math/nearbyintf.S	(Revision 6627)
+++ mingw-w64-crt/math/nearbyintf.S	(Arbeitskopie)
@@ -12,10 +12,10 @@
 #else
 	.align 4
 #endif
-.globl __MINGW_USYMBOL(nearbyintf)
+	.globl __MINGW_USYMBOL(nearbyintf)
 	.def	__MINGW_USYMBOL(nearbyintf);	.scl	2;	.type	32;	.endef
 __MINGW_USYMBOL(nearbyintf):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	movss	%xmm0,-12(%rsp)
 	flds	-12(%rsp)
 	pushq	%rax
@@ -33,7 +33,11 @@
 	fstps	-12(%rsp)
 	movss	-12(%rsp),%xmm0
 	ret
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vcvt.s32.f32	s0, s0
+	vcvt.f32.s32	s0, s0
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	flds	4(%esp)
 	pushl	%eax
 	pushl	%ecx
Index: mingw-w64-crt/math/ceil.S
===================================================================
--- mingw-w64-crt/math/ceil.S	(Revision 6627)
+++ mingw-w64-crt/math/ceil.S	(Arbeitskopie)
@@ -8,14 +8,14 @@
 	.file	"ceil.S"
 	.text
 	.align 4
-.globl __MINGW_USYMBOL(ceil)
+	.globl __MINGW_USYMBOL(ceil)
 	.def	__MINGW_USYMBOL(ceil);	.scl	2;	.type	32;	.endef
 #ifdef _WIN64
 	.seh_proc	__MINGW_USYMBOL(ceil)
 #endif
 
 __MINGW_USYMBOL(ceil):
-#ifdef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
 	.seh_endprologue
 	movd %xmm0, %rax
 	movq	%rax, %rcx
@@ -91,7 +91,16 @@
 .zero:
 	.long	0
 	.long	0
-#else
+#elif defined(_ARM_) || defined(__arm__)
+	vmrs	r1, fpscr
+	bic		r0, r1, #0x00c00000
+	orr		r0, r0, #0x00400000 /* Round towards Plus Infinity */
+	vmsr	fpscr, r0
+	vcvtr.s32.f64	s0, d0
+	vcvt.f64.s32	d0, s0
+	vmsr	fpscr, r1
+	bx	lr
+#elif defined(_X86_) || defined(__i386__)
 	fldl	4(%esp)
 	subl	$8,%esp
 
Index: mingw-w64-crt/profile/profil.c
===================================================================
--- mingw-w64-crt/profile/profil.c	(Revision 6627)
+++ mingw-w64-crt/profile/profil.c	(Arbeitskopie)
@@ -43,9 +43,11 @@
   ctx.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER;
   pc = (size_t) - 1;
   if (GetThreadContext (thr, &ctx)) {
-#ifndef _WIN64
+#if defined(_AMD64_) || defined(__x86_64__)
     pc = ctx.Eip;
-#else
+#elif defined(_ARM_) || defined(__arm__)
+    pc = ctx.Pc;
+#elif defined(_X86_) || defined(__i386__)
     pc = ctx.Rip;
 #endif
   }
Index: mingw-w64-crt/crt/CRT_fp10.c
===================================================================
--- mingw-w64-crt/crt/CRT_fp10.c	(Revision 6627)
+++ mingw-w64-crt/crt/CRT_fp10.c	(Arbeitskopie)
@@ -8,11 +8,17 @@
 
 void _fpreset (void)
 {
+#if defined(_ARM_) || defined(__arm__)
+  __asm__ __volatile__ (
+    "mov	r0, #0x00\n\t" /* INITIAL_FPSCR */
+    "vmsr	fpscr, r0\n\t");
+#else
 #ifdef __GNUC__
   __asm__ ("fninit");
 #else /* msvc: */
   __asm fninit;
 #endif
+#endif
 }
 
 #ifdef __GNUC__
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to