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 */ + +