merged from trunk rev. 4463-4464: Add file intrincs/_mul128.c to build.

git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/stable/v2.x@4465 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index 082250b..61724db 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -261,7 +261,7 @@
   intrincs/ilockadd64.c  \
   intrincs/readgsbyte.c  intrincs/readgsword.c   intrincs/readgsdword.c  intrincs/readgsqword.c    \
   intrincs/writegsbyte.c intrincs/writegsword.c  intrincs/writegsdword.c intrincs/writegsqword.c   \
-  intrincs/mul128ex.c    intrincs/umul128ex.c    intrincs/_umul128.c \
+  intrincs/mul128ex.c    intrincs/umul128ex.c    intrincs/_mul128.c      intrincs/_umul128.c       \
   intrincs/__movsq.c     intrincs/__stosq.c      intrincs/_rotl64.c      intrincs/_rotr64.c
 
 # these only go into the 32 bit version:
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in
index ed1d2e3..1029ff9 100644
--- a/mingw-w64-crt/Makefile.in
+++ b/mingw-w64-crt/Makefile.in
@@ -1426,9 +1426,9 @@
 	intrincs/readgsdword.c intrincs/readgsqword.c \
 	intrincs/writegsbyte.c intrincs/writegsword.c \
 	intrincs/writegsdword.c intrincs/writegsqword.c \
-	intrincs/mul128ex.c intrincs/umul128ex.c intrincs/_umul128.c \
-	intrincs/__movsq.c intrincs/__stosq.c intrincs/_rotl64.c \
-	intrincs/_rotr64.c
+	intrincs/mul128ex.c intrincs/umul128ex.c intrincs/_mul128.c \
+	intrincs/_umul128.c intrincs/__movsq.c intrincs/__stosq.c \
+	intrincs/_rotl64.c intrincs/_rotr64.c
 am__objects_31 = crt/lib64_libmingwex_a-dllentry.$(OBJEXT) \
 	crt/lib64_libmingwex_a-dllmain.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-inbyte.$(OBJEXT) \
@@ -1922,6 +1922,7 @@
 	intrincs/lib64_libmingwex_a-writegsqword.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-mul128ex.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-umul128ex.$(OBJEXT) \
+	intrincs/lib64_libmingwex_a-_mul128.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-_umul128.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-__movsq.$(OBJEXT) \
 	intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT) \
@@ -3351,7 +3352,7 @@
   intrincs/ilockadd64.c  \
   intrincs/readgsbyte.c  intrincs/readgsword.c   intrincs/readgsdword.c  intrincs/readgsqword.c    \
   intrincs/writegsbyte.c intrincs/writegsword.c  intrincs/writegsdword.c intrincs/writegsqword.c   \
-  intrincs/mul128ex.c    intrincs/umul128ex.c    intrincs/_umul128.c \
+  intrincs/mul128ex.c    intrincs/umul128ex.c    intrincs/_mul128.c      intrincs/_umul128.c       \
   intrincs/__movsq.c     intrincs/__stosq.c      intrincs/_rotl64.c      intrincs/_rotr64.c
 
 
@@ -6955,6 +6956,8 @@
 	intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp)
 intrincs/lib64_libmingwex_a-umul128ex.$(OBJEXT):  \
 	intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp)
+intrincs/lib64_libmingwex_a-_mul128.$(OBJEXT):  \
+	intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp)
 intrincs/lib64_libmingwex_a-_umul128.$(OBJEXT):  \
 	intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp)
 intrincs/lib64_libmingwex_a-__movsq.$(OBJEXT):  \
@@ -8364,6 +8367,7 @@
 	-rm -f intrincs/lib64_libmingwex_a-__stosd.$(OBJEXT)
 	-rm -f intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT)
 	-rm -f intrincs/lib64_libmingwex_a-__stosw.$(OBJEXT)
+	-rm -f intrincs/lib64_libmingwex_a-_mul128.$(OBJEXT)
 	-rm -f intrincs/lib64_libmingwex_a-_rotl64.$(OBJEXT)
 	-rm -f intrincs/lib64_libmingwex_a-_rotr64.$(OBJEXT)
 	-rm -f intrincs/lib64_libmingwex_a-_umul128.$(OBJEXT)
@@ -9857,6 +9861,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosd.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosq.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosw.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-_rotl64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-_rotr64.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-_umul128.Po@am__quote@
@@ -27628,6 +27633,20 @@
 @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 intrincs/lib64_libmingwex_a-umul128ex.obj `if test -f 'intrincs/umul128ex.c'; then $(CYGPATH_W) 'intrincs/umul128ex.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/umul128ex.c'; fi`
 
+intrincs/lib64_libmingwex_a-_mul128.o: intrincs/_mul128.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-_mul128.o -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Tpo -c -o intrincs/lib64_libmingwex_a-_mul128.o `test -f 'intrincs/_mul128.c' || echo '$(srcdir)/'`intrincs/_mul128.c
+@am__fastdepCC_TRUE@	$(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='intrincs/_mul128.c' object='intrincs/lib64_libmingwex_a-_mul128.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 intrincs/lib64_libmingwex_a-_mul128.o `test -f 'intrincs/_mul128.c' || echo '$(srcdir)/'`intrincs/_mul128.c
+
+intrincs/lib64_libmingwex_a-_mul128.obj: intrincs/_mul128.c
+@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-_mul128.obj -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Tpo -c -o intrincs/lib64_libmingwex_a-_mul128.obj `if test -f 'intrincs/_mul128.c'; then $(CYGPATH_W) 'intrincs/_mul128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/_mul128.c'; fi`
+@am__fastdepCC_TRUE@	$(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-_mul128.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='intrincs/_mul128.c' object='intrincs/lib64_libmingwex_a-_mul128.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 intrincs/lib64_libmingwex_a-_mul128.obj `if test -f 'intrincs/_mul128.c'; then $(CYGPATH_W) 'intrincs/_mul128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/_mul128.c'; fi`
+
 intrincs/lib64_libmingwex_a-_umul128.o: intrincs/_umul128.c
 @am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-_umul128.o -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-_umul128.Tpo -c -o intrincs/lib64_libmingwex_a-_umul128.o `test -f 'intrincs/_umul128.c' || echo '$(srcdir)/'`intrincs/_umul128.c
 @am__fastdepCC_TRUE@	$(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-_umul128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-_umul128.Po
diff --git a/mingw-w64-crt/intrincs/_mul128.c b/mingw-w64-crt/intrincs/_mul128.c
new file mode 100644
index 0000000..13f8f9c
--- /dev/null
+++ b/mingw-w64-crt/intrincs/_mul128.c
@@ -0,0 +1,22 @@
+#include <_mingw.h>
+
+#ifdef _WIN64
+#ifndef __SIZEOF_INT128__
+typedef signed int __xint128 __attribute__ ((__mode__ (TI)));
+#else
+typedef signed __int128 __xint128;
+#endif
+
+__int64 _mul128(__int64, __int64, __int64 *);
+
+__int64 _mul128(__int64 a, __int64 b, __int64 *hi)
+{
+  union { __xint128 v; __int64 sv[2]; } var;
+  var.v = ((__xint128) a) * ((__xint128) b);
+  if (hi) *hi = var.sv[1];
+  return var.sv[0];
+}
+
+#endif /* _WIN64 */
+
+