* math/trunc*: Optimize for 64-bit without using fpu.
        * Makefile.am: Adjust trunc and truncf source.
        * Makefile.in: Regenerate.



git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@5069 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/ChangeLog b/mingw-w64-crt/ChangeLog
index c3477be..f49b881 100644
--- a/mingw-w64-crt/ChangeLog
+++ b/mingw-w64-crt/ChangeLog
@@ -1,4 +1,10 @@
-2012-05-23  Kai Tietz  <kietz@redhat.com>
+2012-05-26  Kai Tietz  <ktietz@redhat.com>
+
+	* math/trunc*: Optimize for 64-bit without using fpu.
+	* Makefile.am: Adjust trunc and truncf source.
+	* Makefile.in: Regenerate.
+
+2012-05-23  Kai Tietz  <ktietz@redhat.com>
 
 	* lib32/msvcr*.def: Define log/logf imports as DATA.
 	* lib64/msvcr*.def: Likewise.
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 21075bc..68c4cf4 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -199,8 +199,9 @@
   math/sinhf.c        math/sinhl.c        \
   math/sqrtf.c        math/sqrtl.c        math/sqrt.c         \
   math/tanf.c         math/tanhf.c        \
-  math/tanhl.c        math/tgamma.c       math/tgammaf.c      math/tgammal.c       math/trunc.c       math/truncf.c      \
-  math/truncl.c       math/cossin.c       \
+  math/tanhl.c        math/tgamma.c       math/tgammaf.c      math/tgammal.c \
+  math/trunc.S       math/truncf.S        math/truncl.c \
+  math/cossin.c       \
   \
   misc/mingw_matherr.c \
   misc/mb_wc_common.h \
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
index 2eb47c0..80e2f1e 100644
--- a/mingw-w64-crt/Makefile.in
+++ b/mingw-w64-crt/Makefile.in
@@ -424,7 +424,7 @@
 	math/signbitf.c math/signbitl.c math/sinhf.c math/sinhl.c \
 	math/sqrtf.c math/sqrtl.c math/sqrt.c math/tanf.c math/tanhf.c \
 	math/tanhl.c math/tgamma.c math/tgammaf.c math/tgammal.c \
-	math/trunc.c math/truncf.c math/truncl.c math/cossin.c \
+	math/trunc.S math/truncf.S math/truncl.c math/cossin.c \
 	misc/mingw_matherr.c misc/mb_wc_common.h misc/mingw_getsp.S \
 	misc/mingw_get_codepage.c misc/strsafe.c misc/mempcpy.c \
 	misc/wmempcpy.c misc/alarm.c misc/basename.c misc/btowc.c \
@@ -1425,7 +1425,7 @@
 	math/signbitf.c math/signbitl.c math/sinhf.c math/sinhl.c \
 	math/sqrtf.c math/sqrtl.c math/sqrt.c math/tanf.c math/tanhf.c \
 	math/tanhl.c math/tgamma.c math/tgammaf.c math/tgammal.c \
-	math/trunc.c math/truncf.c math/truncl.c math/cossin.c \
+	math/trunc.S math/truncf.S math/truncl.c math/cossin.c \
 	misc/mingw_matherr.c misc/mb_wc_common.h misc/mingw_getsp.S \
 	misc/mingw_get_codepage.c misc/strsafe.c misc/mempcpy.c \
 	misc/wmempcpy.c misc/alarm.c misc/basename.c misc/btowc.c \
@@ -3407,8 +3407,9 @@
   math/sinhf.c        math/sinhl.c        \
   math/sqrtf.c        math/sqrtl.c        math/sqrt.c         \
   math/tanf.c         math/tanhf.c        \
-  math/tanhl.c        math/tgamma.c       math/tgammaf.c      math/tgammal.c       math/trunc.c       math/truncf.c      \
-  math/truncl.c       math/cossin.c       \
+  math/tanhl.c        math/tgamma.c       math/tgammaf.c      math/tgammal.c \
+  math/trunc.S       math/truncf.S        math/truncl.c \
+  math/cossin.c       \
   \
   misc/mingw_matherr.c \
   misc/mb_wc_common.h \
@@ -11873,6 +11874,34 @@
 @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib32_libmingwex_a-ceil.obj `if test -f 'math/ceil.S'; then $(CYGPATH_W) 'math/ceil.S'; else $(CYGPATH_W) '$(srcdir)/math/ceil.S'; fi`
 
+math/lib32_libmingwex_a-trunc.o: math/trunc.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib32_libmingwex_a-trunc.o -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo -c -o math/lib32_libmingwex_a-trunc.o `test -f 'math/trunc.S' || echo '$(srcdir)/'`math/trunc.S
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib32_libmingwex_a-trunc.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/trunc.S' object='math/lib32_libmingwex_a-trunc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib32_libmingwex_a-trunc.o `test -f 'math/trunc.S' || echo '$(srcdir)/'`math/trunc.S
+
+math/lib32_libmingwex_a-trunc.obj: math/trunc.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib32_libmingwex_a-trunc.obj -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo -c -o math/lib32_libmingwex_a-trunc.obj `if test -f 'math/trunc.S'; then $(CYGPATH_W) 'math/trunc.S'; else $(CYGPATH_W) '$(srcdir)/math/trunc.S'; fi`
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib32_libmingwex_a-trunc.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/trunc.S' object='math/lib32_libmingwex_a-trunc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib32_libmingwex_a-trunc.obj `if test -f 'math/trunc.S'; then $(CYGPATH_W) 'math/trunc.S'; else $(CYGPATH_W) '$(srcdir)/math/trunc.S'; fi`
+
+math/lib32_libmingwex_a-truncf.o: math/truncf.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib32_libmingwex_a-truncf.o -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo -c -o math/lib32_libmingwex_a-truncf.o `test -f 'math/truncf.S' || echo '$(srcdir)/'`math/truncf.S
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib32_libmingwex_a-truncf.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/truncf.S' object='math/lib32_libmingwex_a-truncf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib32_libmingwex_a-truncf.o `test -f 'math/truncf.S' || echo '$(srcdir)/'`math/truncf.S
+
+math/lib32_libmingwex_a-truncf.obj: math/truncf.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib32_libmingwex_a-truncf.obj -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo -c -o math/lib32_libmingwex_a-truncf.obj `if test -f 'math/truncf.S'; then $(CYGPATH_W) 'math/truncf.S'; else $(CYGPATH_W) '$(srcdir)/math/truncf.S'; fi`
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib32_libmingwex_a-truncf.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/truncf.S' object='math/lib32_libmingwex_a-truncf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib32_libmingwex_a-truncf.obj `if test -f 'math/truncf.S'; then $(CYGPATH_W) 'math/truncf.S'; else $(CYGPATH_W) '$(srcdir)/math/truncf.S'; fi`
+
 misc/lib32_libmingwex_a-mingw_getsp.o: misc/mingw_getsp.S
 @am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT misc/lib32_libmingwex_a-mingw_getsp.o -MD -MP -MF misc/$(DEPDIR)/lib32_libmingwex_a-mingw_getsp.Tpo -c -o misc/lib32_libmingwex_a-mingw_getsp.o `test -f 'misc/mingw_getsp.S' || echo '$(srcdir)/'`misc/mingw_getsp.S
 @am__fastdepCCAS_TRUE@	$(am__mv) misc/$(DEPDIR)/lib32_libmingwex_a-mingw_getsp.Tpo misc/$(DEPDIR)/lib32_libmingwex_a-mingw_getsp.Po
@@ -12503,6 +12532,34 @@
 @AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib64_libmingwex_a-ceil.obj `if test -f 'math/ceil.S'; then $(CYGPATH_W) 'math/ceil.S'; else $(CYGPATH_W) '$(srcdir)/math/ceil.S'; fi`
 
+math/lib64_libmingwex_a-trunc.o: math/trunc.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib64_libmingwex_a-trunc.o -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo -c -o math/lib64_libmingwex_a-trunc.o `test -f 'math/trunc.S' || echo '$(srcdir)/'`math/trunc.S
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib64_libmingwex_a-trunc.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/trunc.S' object='math/lib64_libmingwex_a-trunc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib64_libmingwex_a-trunc.o `test -f 'math/trunc.S' || echo '$(srcdir)/'`math/trunc.S
+
+math/lib64_libmingwex_a-trunc.obj: math/trunc.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib64_libmingwex_a-trunc.obj -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo -c -o math/lib64_libmingwex_a-trunc.obj `if test -f 'math/trunc.S'; then $(CYGPATH_W) 'math/trunc.S'; else $(CYGPATH_W) '$(srcdir)/math/trunc.S'; fi`
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib64_libmingwex_a-trunc.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/trunc.S' object='math/lib64_libmingwex_a-trunc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib64_libmingwex_a-trunc.obj `if test -f 'math/trunc.S'; then $(CYGPATH_W) 'math/trunc.S'; else $(CYGPATH_W) '$(srcdir)/math/trunc.S'; fi`
+
+math/lib64_libmingwex_a-truncf.o: math/truncf.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib64_libmingwex_a-truncf.o -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo -c -o math/lib64_libmingwex_a-truncf.o `test -f 'math/truncf.S' || echo '$(srcdir)/'`math/truncf.S
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib64_libmingwex_a-truncf.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/truncf.S' object='math/lib64_libmingwex_a-truncf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib64_libmingwex_a-truncf.o `test -f 'math/truncf.S' || echo '$(srcdir)/'`math/truncf.S
+
+math/lib64_libmingwex_a-truncf.obj: math/truncf.S
+@am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT math/lib64_libmingwex_a-truncf.obj -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo -c -o math/lib64_libmingwex_a-truncf.obj `if test -f 'math/truncf.S'; then $(CYGPATH_W) 'math/truncf.S'; else $(CYGPATH_W) '$(srcdir)/math/truncf.S'; fi`
+@am__fastdepCCAS_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib64_libmingwex_a-truncf.Po
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	source='math/truncf.S' object='math/lib64_libmingwex_a-truncf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCCAS_FALSE@	DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCCAS_FALSE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o math/lib64_libmingwex_a-truncf.obj `if test -f 'math/truncf.S'; then $(CYGPATH_W) 'math/truncf.S'; else $(CYGPATH_W) '$(srcdir)/math/truncf.S'; fi`
+
 misc/lib64_libmingwex_a-mingw_getsp.o: misc/mingw_getsp.S
 @am__fastdepCCAS_TRUE@	$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT misc/lib64_libmingwex_a-mingw_getsp.o -MD -MP -MF misc/$(DEPDIR)/lib64_libmingwex_a-mingw_getsp.Tpo -c -o misc/lib64_libmingwex_a-mingw_getsp.o `test -f 'misc/mingw_getsp.S' || echo '$(srcdir)/'`misc/mingw_getsp.S
 @am__fastdepCCAS_TRUE@	$(am__mv) misc/$(DEPDIR)/lib64_libmingwex_a-mingw_getsp.Tpo misc/$(DEPDIR)/lib64_libmingwex_a-mingw_getsp.Po
@@ -16943,34 +17000,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib32_libmingwex_a-tgammal.obj `if test -f 'math/tgammal.c'; then $(CYGPATH_W) 'math/tgammal.c'; else $(CYGPATH_W) '$(srcdir)/math/tgammal.c'; fi`
 
-math/lib32_libmingwex_a-trunc.o: math/trunc.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib32_libmingwex_a-trunc.o -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo -c -o math/lib32_libmingwex_a-trunc.o `test -f 'math/trunc.c' || echo '$(srcdir)/'`math/trunc.c
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib32_libmingwex_a-trunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/trunc.c' object='math/lib32_libmingwex_a-trunc.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib32_libmingwex_a-trunc.o `test -f 'math/trunc.c' || echo '$(srcdir)/'`math/trunc.c
-
-math/lib32_libmingwex_a-trunc.obj: math/trunc.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib32_libmingwex_a-trunc.obj -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo -c -o math/lib32_libmingwex_a-trunc.obj `if test -f 'math/trunc.c'; then $(CYGPATH_W) 'math/trunc.c'; else $(CYGPATH_W) '$(srcdir)/math/trunc.c'; fi`
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib32_libmingwex_a-trunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/trunc.c' object='math/lib32_libmingwex_a-trunc.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib32_libmingwex_a-trunc.obj `if test -f 'math/trunc.c'; then $(CYGPATH_W) 'math/trunc.c'; else $(CYGPATH_W) '$(srcdir)/math/trunc.c'; fi`
-
-math/lib32_libmingwex_a-truncf.o: math/truncf.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib32_libmingwex_a-truncf.o -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo -c -o math/lib32_libmingwex_a-truncf.o `test -f 'math/truncf.c' || echo '$(srcdir)/'`math/truncf.c
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib32_libmingwex_a-truncf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/truncf.c' object='math/lib32_libmingwex_a-truncf.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib32_libmingwex_a-truncf.o `test -f 'math/truncf.c' || echo '$(srcdir)/'`math/truncf.c
-
-math/lib32_libmingwex_a-truncf.obj: math/truncf.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib32_libmingwex_a-truncf.obj -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo -c -o math/lib32_libmingwex_a-truncf.obj `if test -f 'math/truncf.c'; then $(CYGPATH_W) 'math/truncf.c'; else $(CYGPATH_W) '$(srcdir)/math/truncf.c'; fi`
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib32_libmingwex_a-truncf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/truncf.c' object='math/lib32_libmingwex_a-truncf.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib32_libmingwex_a-truncf.obj `if test -f 'math/truncf.c'; then $(CYGPATH_W) 'math/truncf.c'; else $(CYGPATH_W) '$(srcdir)/math/truncf.c'; fi`
-
 math/lib32_libmingwex_a-truncl.o: math/truncl.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib32_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib32_libmingwex_a-truncl.o -MD -MP -MF math/$(DEPDIR)/lib32_libmingwex_a-truncl.Tpo -c -o math/lib32_libmingwex_a-truncl.o `test -f 'math/truncl.c' || echo '$(srcdir)/'`math/truncl.c
 @am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib32_libmingwex_a-truncl.Tpo math/$(DEPDIR)/lib32_libmingwex_a-truncl.Po
@@ -25357,34 +25386,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib64_libmingwex_a-tgammal.obj `if test -f 'math/tgammal.c'; then $(CYGPATH_W) 'math/tgammal.c'; else $(CYGPATH_W) '$(srcdir)/math/tgammal.c'; fi`
 
-math/lib64_libmingwex_a-trunc.o: math/trunc.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib64_libmingwex_a-trunc.o -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo -c -o math/lib64_libmingwex_a-trunc.o `test -f 'math/trunc.c' || echo '$(srcdir)/'`math/trunc.c
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib64_libmingwex_a-trunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/trunc.c' object='math/lib64_libmingwex_a-trunc.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib64_libmingwex_a-trunc.o `test -f 'math/trunc.c' || echo '$(srcdir)/'`math/trunc.c
-
-math/lib64_libmingwex_a-trunc.obj: math/trunc.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib64_libmingwex_a-trunc.obj -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo -c -o math/lib64_libmingwex_a-trunc.obj `if test -f 'math/trunc.c'; then $(CYGPATH_W) 'math/trunc.c'; else $(CYGPATH_W) '$(srcdir)/math/trunc.c'; fi`
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-trunc.Tpo math/$(DEPDIR)/lib64_libmingwex_a-trunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/trunc.c' object='math/lib64_libmingwex_a-trunc.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib64_libmingwex_a-trunc.obj `if test -f 'math/trunc.c'; then $(CYGPATH_W) 'math/trunc.c'; else $(CYGPATH_W) '$(srcdir)/math/trunc.c'; fi`
-
-math/lib64_libmingwex_a-truncf.o: math/truncf.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib64_libmingwex_a-truncf.o -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo -c -o math/lib64_libmingwex_a-truncf.o `test -f 'math/truncf.c' || echo '$(srcdir)/'`math/truncf.c
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib64_libmingwex_a-truncf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/truncf.c' object='math/lib64_libmingwex_a-truncf.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib64_libmingwex_a-truncf.o `test -f 'math/truncf.c' || echo '$(srcdir)/'`math/truncf.c
-
-math/lib64_libmingwex_a-truncf.obj: math/truncf.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib64_libmingwex_a-truncf.obj -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo -c -o math/lib64_libmingwex_a-truncf.obj `if test -f 'math/truncf.c'; then $(CYGPATH_W) 'math/truncf.c'; else $(CYGPATH_W) '$(srcdir)/math/truncf.c'; fi`
-@am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-truncf.Tpo math/$(DEPDIR)/lib64_libmingwex_a-truncf.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='math/truncf.c' object='math/lib64_libmingwex_a-truncf.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o math/lib64_libmingwex_a-truncf.obj `if test -f 'math/truncf.c'; then $(CYGPATH_W) 'math/truncf.c'; else $(CYGPATH_W) '$(srcdir)/math/truncf.c'; fi`
-
 math/lib64_libmingwex_a-truncl.o: math/truncl.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT math/lib64_libmingwex_a-truncl.o -MD -MP -MF math/$(DEPDIR)/lib64_libmingwex_a-truncl.Tpo -c -o math/lib64_libmingwex_a-truncl.o `test -f 'math/truncl.c' || echo '$(srcdir)/'`math/truncl.c
 @am__fastdepCC_TRUE@	$(am__mv) math/$(DEPDIR)/lib64_libmingwex_a-truncl.Tpo math/$(DEPDIR)/lib64_libmingwex_a-truncl.Po
diff --git a/mingw-w64-crt/math/trunc.S b/mingw-w64-crt/math/trunc.S
new file mode 100755
index 0000000..7497e1e
--- /dev/null
+++ b/mingw-w64-crt/math/trunc.S
@@ -0,0 +1,91 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <_mingw_mac.h>
+
+	.file "trunc.S"
+	.text
+	.p2align 4,,15
+.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
+	subq	$24, %rsp
+	.seh_stackalloc	24
+	.seh_endprologue
+	movsd	%xmm0, 8(%rsp)
+	movq	8(%rsp), %r8
+	movq	%r8, %rdx
+	shrq	$32, %rdx
+	movl	%edx, %eax
+	sarl	$20, %eax
+	andl	$2047, %eax
+	leal	-1023(%rax), %ecx
+	cmpl	$19, %ecx
+	jg	.l1
+	movl	%edx, %r8d
+	andl	$-2147483648, %r8d
+	testl	%ecx, %ecx
+	js	.l3
+	movl	$1048575, %eax
+	sarl	%cl, %eax
+	notl	%eax
+	andl	%edx, %eax
+	orl	%r8d, %eax
+	salq	$32, %rax
+	movq	%rax, 8(%rsp)
+	movsd	8(%rsp), %xmm0
+	addq	$24, %rsp
+	ret
+	.p2align 4,,10
+.l1:
+	cmpl	$51, %ecx
+	jle	.l2
+	/* Is x inf/nan? */
+	cmpl	$1024, %ecx
+	jne	.noinfnan
+	addsd	%xmm0, %xmm0
+.noinfnan:
+	addq	$24, %rsp
+	ret
+	.p2align 4,,10
+.l2:
+	leal	-1043(%rax), %ecx
+	movl	$-1, %r9d
+	salq	$32, %rdx
+	shrl	%cl, %r9d
+	notl	%r9d
+	andl	%r9d, %r8d
+	orq	%r8, %rdx
+	movq	%rdx, 8(%rsp)
+	movsd	8(%rsp), %xmm0
+	addq	$24, %rsp
+	ret
+	.p2align 4,,10
+.l3:
+	salq	$32, %r8
+	movq	%r8, 8(%rsp)
+	movsd	8(%rsp), %xmm0
+	addq	$24, %rsp
+	ret
+	.seh_endproc
+#else
+	fldl    4(%esp)
+	subl	$8, %esp
+	fstcw	(%esp)
+	/* FE_TOWARDZERO */
+	movzwl (%esp), %eax
+	orb    $0xc, %ah
+	movw	%ax, 4(%esp)
+	fldcw	4(%esp)
+	frndint
+	fldcw	(%esp)
+	addl	$8, %esp
+	ret
+#endif
diff --git a/mingw-w64-crt/math/trunc.c b/mingw-w64-crt/math/trunc.c
deleted file mode 100644
index 8c567f2..0000000
--- a/mingw-w64-crt/math/trunc.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the w64 mingw-runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#include <fenv.h>
-#include <math.h>
-
-double
-trunc (double _x){
-  double retval = 0.0;
-  unsigned short saved_cw;
-  unsigned short tmp_cw;
-  __asm__ __volatile__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
-  tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
-	    | FE_TOWARDZERO;
-  __asm__ __volatile__ ("fldcw %0;" : : "m" (tmp_cw));
-  __asm__ __volatile__ ("frndint;" : "=t" (retval)  : "0" (_x)); /* round towards zero */
-  __asm__ __volatile__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
-  return retval;
-}
diff --git a/mingw-w64-crt/math/truncf.S b/mingw-w64-crt/math/truncf.S
new file mode 100755
index 0000000..fa3e8ca
--- /dev/null
+++ b/mingw-w64-crt/math/truncf.S
@@ -0,0 +1,71 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+#include <_mingw_mac.h>
+
+        .file "truncf.S"
+        .text
+        .p2align 4,,15
+.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
+	subq	$24, %rsp
+	.seh_stackalloc	24
+	.seh_endprologue
+	movd	%xmm0, 12(%rsp)
+	movl	12(%rsp), %edx
+	movl	%edx, %ecx
+	sarl	$23, %ecx
+	andl	$255, %ecx
+	subl	$127, %ecx
+	cmpl	$22, %ecx
+	jg	.l1
+	movl	%edx, %r8d
+	andl	$-2147483648, %r8d
+	testl	%ecx, %ecx
+	js	.l2
+	movl	$8388607, %eax
+	sarl	%cl, %eax
+	notl	%eax
+	andl	%edx, %eax
+	orl	%r8d, %eax
+	movl	%eax, 8(%rsp)
+	movss	8(%rsp), %xmm0
+	addq	$24, %rsp
+	ret
+	.p2align 4,,10
+.l1:
+	addl	$-128, %ecx
+	jne	.noinfnan
+	addss	%xmm0, %xmm0
+.noinfnan:
+	addq	$24, %rsp
+	ret
+	.p2align 4,,10
+.l2:
+	movl	%r8d, 8(%rsp)
+	movss	8(%rsp), %xmm0
+	addq	$24, %rsp
+	ret
+	.seh_endproc
+#else
+        flds    4(%esp)
+        subl    $8, %esp
+        fstcw   (%esp)
+        /* FE_TOWARDZERO */
+        movzwl (%esp), %eax
+        orb    $0xc, %ah
+        movw    %ax, 4(%esp)
+        fldcw   4(%esp)
+        frndint
+        fldcw   (%esp)
+        addl    $8, %esp
+        ret
+#endif
diff --git a/mingw-w64-crt/math/truncf.c b/mingw-w64-crt/math/truncf.c
deleted file mode 100644
index 0fd6a46..0000000
--- a/mingw-w64-crt/math/truncf.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * This file has no copyright assigned and is placed in the Public Domain.
- * This file is part of the w64 mingw-runtime package.
- * No warranty is given; refer to the file DISCLAIMER.PD within this package.
- */
-#include <fenv.h>
-#include <math.h>
-
-float
-truncf (float _x)
-{
-  float retval = 0.0F;
-  unsigned short saved_cw;
-  unsigned short tmp_cw;
-  __asm__ __volatile__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
-  tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
-	    | FE_TOWARDZERO;
-  __asm__ __volatile__ ("fldcw %0;" : : "m" (tmp_cw));
-  __asm__ __volatile__ ("frndint;" : "=t" (retval)  : "0" (_x)); /* round towards zero */
-  __asm__ __volatile__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
-  return retval;
-}