merged from trunk rev. 4466-4469: ktietz70: Add shift left/right 128 intrinsics git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/stable/v2.x@4498 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am index 61724db..771a6a9 100644 --- a/mingw-w64-crt/Makefile.am +++ b/mingw-w64-crt/Makefile.am
@@ -262,7 +262,8 @@ 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/_mul128.c intrincs/_umul128.c \ - intrincs/__movsq.c intrincs/__stosq.c intrincs/_rotl64.c intrincs/_rotr64.c + intrincs/__movsq.c intrincs/__shiftright128.c intrincs/__shiftleft128.c \ + intrincs/__stosq.c intrincs/_rotl64.c intrincs/_rotr64.c # these only go into the 32 bit version: src_libmingwex32=\
diff --git a/mingw-w64-crt/Makefile.in b/mingw-w64-crt/Makefile.in index 1029ff9..3fe0e8f 100644 --- a/mingw-w64-crt/Makefile.in +++ b/mingw-w64-crt/Makefile.in
@@ -1427,8 +1427,9 @@ intrincs/writegsbyte.c intrincs/writegsword.c \ intrincs/writegsdword.c intrincs/writegsqword.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 + intrincs/_umul128.c intrincs/__movsq.c \ + intrincs/__shiftright128.c intrincs/__shiftleft128.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) \ @@ -1925,6 +1926,8 @@ intrincs/lib64_libmingwex_a-_mul128.$(OBJEXT) \ intrincs/lib64_libmingwex_a-_umul128.$(OBJEXT) \ intrincs/lib64_libmingwex_a-__movsq.$(OBJEXT) \ + intrincs/lib64_libmingwex_a-__shiftright128.$(OBJEXT) \ + intrincs/lib64_libmingwex_a-__shiftleft128.$(OBJEXT) \ intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT) \ intrincs/lib64_libmingwex_a-_rotl64.$(OBJEXT) \ intrincs/lib64_libmingwex_a-_rotr64.$(OBJEXT) @@ -3353,7 +3356,8 @@ 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/_mul128.c intrincs/_umul128.c \ - intrincs/__movsq.c intrincs/__stosq.c intrincs/_rotl64.c intrincs/_rotr64.c + intrincs/__movsq.c intrincs/__shiftright128.c intrincs/__shiftleft128.c \ + intrincs/__stosq.c intrincs/_rotl64.c intrincs/_rotr64.c # these only go into the 32 bit version: @@ -6962,6 +6966,10 @@ intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp) intrincs/lib64_libmingwex_a-__movsq.$(OBJEXT): \ intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp) +intrincs/lib64_libmingwex_a-__shiftright128.$(OBJEXT): \ + intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp) +intrincs/lib64_libmingwex_a-__shiftleft128.$(OBJEXT): \ + intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp) intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT): \ intrincs/$(am__dirstamp) intrincs/$(DEPDIR)/$(am__dirstamp) intrincs/lib64_libmingwex_a-_rotl64.$(OBJEXT): \ @@ -8363,6 +8371,8 @@ -rm -f intrincs/lib64_libmingwex_a-__movsd.$(OBJEXT) -rm -f intrincs/lib64_libmingwex_a-__movsq.$(OBJEXT) -rm -f intrincs/lib64_libmingwex_a-__movsw.$(OBJEXT) + -rm -f intrincs/lib64_libmingwex_a-__shiftleft128.$(OBJEXT) + -rm -f intrincs/lib64_libmingwex_a-__shiftright128.$(OBJEXT) -rm -f intrincs/lib64_libmingwex_a-__stosb.$(OBJEXT) -rm -f intrincs/lib64_libmingwex_a-__stosd.$(OBJEXT) -rm -f intrincs/lib64_libmingwex_a-__stosq.$(OBJEXT) @@ -9857,6 +9867,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__movsd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__movsq.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__movsw.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosb.Po@am__quote@ @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@ @@ -27675,6 +27687,34 @@ @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-__movsq.obj `if test -f 'intrincs/__movsq.c'; then $(CYGPATH_W) 'intrincs/__movsq.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/__movsq.c'; fi` +intrincs/lib64_libmingwex_a-__shiftright128.o: intrincs/__shiftright128.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-__shiftright128.o -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Tpo -c -o intrincs/lib64_libmingwex_a-__shiftright128.o `test -f 'intrincs/__shiftright128.c' || echo '$(srcdir)/'`intrincs/__shiftright128.c +@am__fastdepCC_TRUE@ $(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrincs/__shiftright128.c' object='intrincs/lib64_libmingwex_a-__shiftright128.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-__shiftright128.o `test -f 'intrincs/__shiftright128.c' || echo '$(srcdir)/'`intrincs/__shiftright128.c + +intrincs/lib64_libmingwex_a-__shiftright128.obj: intrincs/__shiftright128.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-__shiftright128.obj -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Tpo -c -o intrincs/lib64_libmingwex_a-__shiftright128.obj `if test -f 'intrincs/__shiftright128.c'; then $(CYGPATH_W) 'intrincs/__shiftright128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/__shiftright128.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftright128.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrincs/__shiftright128.c' object='intrincs/lib64_libmingwex_a-__shiftright128.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-__shiftright128.obj `if test -f 'intrincs/__shiftright128.c'; then $(CYGPATH_W) 'intrincs/__shiftright128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/__shiftright128.c'; fi` + +intrincs/lib64_libmingwex_a-__shiftleft128.o: intrincs/__shiftleft128.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-__shiftleft128.o -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Tpo -c -o intrincs/lib64_libmingwex_a-__shiftleft128.o `test -f 'intrincs/__shiftleft128.c' || echo '$(srcdir)/'`intrincs/__shiftleft128.c +@am__fastdepCC_TRUE@ $(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrincs/__shiftleft128.c' object='intrincs/lib64_libmingwex_a-__shiftleft128.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-__shiftleft128.o `test -f 'intrincs/__shiftleft128.c' || echo '$(srcdir)/'`intrincs/__shiftleft128.c + +intrincs/lib64_libmingwex_a-__shiftleft128.obj: intrincs/__shiftleft128.c +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-__shiftleft128.obj -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Tpo -c -o intrincs/lib64_libmingwex_a-__shiftleft128.obj `if test -f 'intrincs/__shiftleft128.c'; then $(CYGPATH_W) 'intrincs/__shiftleft128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/__shiftleft128.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-__shiftleft128.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='intrincs/__shiftleft128.c' object='intrincs/lib64_libmingwex_a-__shiftleft128.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-__shiftleft128.obj `if test -f 'intrincs/__shiftleft128.c'; then $(CYGPATH_W) 'intrincs/__shiftleft128.c'; else $(CYGPATH_W) '$(srcdir)/intrincs/__shiftleft128.c'; fi` + intrincs/lib64_libmingwex_a-__stosq.o: intrincs/__stosq.c @am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib64_libmingwex_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT intrincs/lib64_libmingwex_a-__stosq.o -MD -MP -MF intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosq.Tpo -c -o intrincs/lib64_libmingwex_a-__stosq.o `test -f 'intrincs/__stosq.c' || echo '$(srcdir)/'`intrincs/__stosq.c @am__fastdepCC_TRUE@ $(am__mv) intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosq.Tpo intrincs/$(DEPDIR)/lib64_libmingwex_a-__stosq.Po
diff --git a/mingw-w64-crt/intrincs/__shiftleft128.c b/mingw-w64-crt/intrincs/__shiftleft128.c new file mode 100644 index 0000000..621eef2 --- /dev/null +++ b/mingw-w64-crt/intrincs/__shiftleft128.c
@@ -0,0 +1,27 @@ +#include <_mingw.h> + +#ifdef _WIN64 + +unsigned __int64 __shiftleft128 (unsigned __int64 LowPart, + unsigned __int64 HighPart, unsigned char Shift); + +unsigned __int64 __shiftleft128 (unsigned __int64 LowPart, + unsigned __int64 HighPart, unsigned char Shift) +{ + if (Shift >= 128) + return 0ULL; + if (!Shift) + return HighPart; + if (Shift >= 64) + { + HighPart = LowPart; + Shift -= 64; + LowPart = 0; + } + HighPart <<= Shift; + LowPart >>= (64 - Shift); + return (HighPart | LowPart); +} + +#endif +
diff --git a/mingw-w64-crt/intrincs/__shiftright128.c b/mingw-w64-crt/intrincs/__shiftright128.c new file mode 100644 index 0000000..b61899b --- /dev/null +++ b/mingw-w64-crt/intrincs/__shiftright128.c
@@ -0,0 +1,27 @@ +#include <_mingw.h> + +#ifdef _WIN64 + +unsigned __int64 __shiftright128 (unsigned __int64 LowPart, + unsigned __int64 HighPart, unsigned char Shift); + +unsigned __int64 __shiftright128 (unsigned __int64 LowPart, + unsigned __int64 HighPart, unsigned char Shift) +{ + if (Shift >= 128) + return 0ULL; + if (!Shift) + return LowPart; + if (Shift >= 64) + { + LowPart = HighPart; + Shift -= 64; + HighPart = 0; + } + LowPart >>= Shift; + HighPart <<= (64 - Shift); + return (HighPart | LowPart); +} + +#endif +