integer-gmp 1.0.0.1 → 1.0.1.0
raw patch · 9 files changed
+281/−126 lines, 9 filesdep ~ghc-primPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: ghc-prim
API changes (from Hackage documentation)
Files
- cbits/wrappers.c +11/−3
- changelog.md +10/−0
- config.guess +125/−72
- config.sub +66/−24
- integer-gmp.cabal +12/−3
- src/GHC/Integer.hs +1/−1
- src/GHC/Integer/GMP/Internals.hs +1/−1
- src/GHC/Integer/Logarithms.hs +2/−1
- src/GHC/Integer/Type.hs +53/−21
cbits/wrappers.c view
@@ -105,7 +105,10 @@ /* Twos-complement version of 'integer_gmp_mpn_rshift' for performing * arithmetic right shifts on "negative" MPNs. *- * Same pre-conditions as 'integer_gmp_mpn_rshift'+ * pre-conditions:+ * - 0 < count < sn*GMP_NUMB_BITS+ * - rn = sn - floor((count - 1) / GMP_NUMB_BITS)+ * - sn > 0 * * This variant is needed to operate on MPNs interpreted as negative * numbers, which require "rounding" towards minus infinity iff a@@ -117,7 +120,7 @@ { const mp_size_t limb_shift = count / GMP_NUMB_BITS; const unsigned int bit_shift = count % GMP_NUMB_BITS;- const mp_size_t rn = sn - limb_shift;+ mp_size_t rn = sn - limb_shift; // whether non-zero bits were shifted out bool nz_shift_out = false;@@ -125,8 +128,13 @@ if (bit_shift) { if (mpn_rshift(rp, &sp[limb_shift], rn, bit_shift)) nz_shift_out = true;- } else+ } else {+ // rp was allocated (rn + 1) limbs, to prevent carry+ // on mpn_add_1 when all the bits of {rp, rn} are 1.+ memset(&rp[rn], 0, sizeof(mp_limb_t)); memcpy(rp, &sp[limb_shift], rn*sizeof(mp_limb_t));+ rn++;+ } if (!nz_shift_out) for (unsigned i = 0; i < limb_shift; i++)
changelog.md view
@@ -1,5 +1,15 @@ # Changelog for [`integer-gmp` package](http://hackage.haskell.org/package/integer-gmp) +## 1.0.1.0 *July 2017*++ * Bundled with GHC 8.2.1++ * Optimize `minusInteger`++ * Fix the right-shift operation for negative big integers (fixes GHC #12136)++ * Make operations more strict+ ## 1.0.0.1 *Feb 2016* * Bundled with GHC 8.0.1
config.guess view
@@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name.-# Copyright 1992-2014 Free Software Foundation, Inc.+# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2014-03-23'+timestamp='2017-07-19' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by@@ -24,12 +24,12 @@ # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). #-# Originally written by Per Bothner.+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from:-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess #-# Please send patches with a ChangeLog entry to config-patches@gnu.org.+# Please send patches to <config-patches@gnu.org>. me=`echo "$0" | sed -e 's,.*/,,'`@@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner.-Copyright 1992-2014 Free Software Foundation, Inc.+Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."@@ -168,19 +168,29 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch"- UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \- /usr/sbin/$sysctl 2>/dev/null || echo unknown)`+ UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \+ /sbin/$sysctl 2>/dev/null || \+ /usr/sbin/$sysctl 2>/dev/null || \+ echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;;+ earmv*)+ arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`+ endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`+ machine=${arch}${endian}-unknown+ ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched- # to ELF recently, or will in the future.+ # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in+ earm*)+ os=netbsdelf+ ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \@@ -197,6 +207,13 @@ os=netbsd ;; esac+ # Determine ABI tags.+ case "${UNAME_MACHINE_ARCH}" in+ earm*)+ expr='s/^earmv[0-9]/-eabi/;s/eb$//'+ abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`+ ;;+ esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need@@ -207,13 +224,13 @@ release='-gnu' ;; *)- release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`+ release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.- echo "${machine}-${os}${release}"+ echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`@@ -223,6 +240,10 @@ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;;+ *:LibertyBSD:*:*)+ UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`+ echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}+ exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;;@@ -235,6 +256,9 @@ *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;;+ *:Sortix:*:*)+ echo ${UNAME_MACHINE}-unknown-sortix+ exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0)@@ -251,42 +275,42 @@ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)")- UNAME_MACHINE="alpha" ;;+ UNAME_MACHINE=alpha ;; "EV4.5 (21064)")- UNAME_MACHINE="alpha" ;;+ UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)")- UNAME_MACHINE="alpha" ;;+ UNAME_MACHINE=alpha ;; "EV5 (21164)")- UNAME_MACHINE="alphaev5" ;;+ UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)")- UNAME_MACHINE="alphaev56" ;;+ UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)")- UNAME_MACHINE="alphapca56" ;;+ UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)")- UNAME_MACHINE="alphapca57" ;;+ UNAME_MACHINE=alphapca57 ;; "EV6 (21264)")- UNAME_MACHINE="alphaev6" ;;+ UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)")- UNAME_MACHINE="alphaev67" ;;+ UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)")- UNAME_MACHINE="alphaev68" ;;+ UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)")- UNAME_MACHINE="alphaev68" ;;+ UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)")- UNAME_MACHINE="alphaev68" ;;+ UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)")- UNAME_MACHINE="alphaev69" ;;+ UNAME_MACHINE=alphaev69 ;; "EV7 (21364)")- UNAME_MACHINE="alphaev7" ;;+ UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)")- UNAME_MACHINE="alphaev79" ;;+ UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r.- echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0@@ -359,16 +383,16 @@ exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build- SUN_ARCH="i386"+ SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers.- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then- SUN_ARCH="x86_64"+ SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`@@ -393,7 +417,7 @@ exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`- test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3+ test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE}@@ -579,8 +603,9 @@ else IBM_ARCH=powerpc fi- if [ -x /usr/bin/oslevel ] ; then- IBM_REV=`/usr/bin/oslevel`+ if [ -x /usr/bin/lslpp ] ; then+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |+ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi@@ -617,13 +642,13 @@ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1+ 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0+ 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in- 32) HP_ARCH="hppa2.0n" ;;- 64) HP_ARCH="hppa2.0w" ;;- '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20+ 32) HP_ARCH=hppa2.0n ;;+ 64) HP_ARCH=hppa2.0w ;;+ '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi@@ -662,11 +687,11 @@ exit (0); } EOF- (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`+ (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac- if [ ${HP_ARCH} = "hppa2.0w" ]+ if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -679,12 +704,12 @@ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |+ if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then- HP_ARCH="hppa2.0w"+ HP_ARCH=hppa2.0w else- HP_ARCH="hppa64"+ HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV}@@ -789,14 +814,14 @@ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)- FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`+ FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*)- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`+ FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)@@ -812,10 +837,11 @@ UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64)- echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;- *)- echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;+ UNAME_PROCESSOR=x86_64 ;;+ i386)+ UNAME_PROCESSOR=i586 ;; esac+ echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin@@ -878,7 +904,7 @@ exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland- echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}+ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix@@ -901,7 +927,7 @@ EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1- if test "$?" = 0 ; then LIBC="gnulibc1" ; fi+ if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*)@@ -932,6 +958,9 @@ crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;;+ e2k:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}+ exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;;@@ -944,6 +973,9 @@ ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;;+ k1om:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}+ exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;;@@ -969,6 +1001,9 @@ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;;+ mips64el:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}+ exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;;@@ -1001,6 +1036,9 @@ ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;;+ riscv32:Linux:*:* | riscv64:Linux:*:*)+ echo ${UNAME_MACHINE}-unknown-linux-${LIBC}+ exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;;@@ -1020,7 +1058,7 @@ echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*)- echo ${UNAME_MACHINE}-unknown-linux-${LIBC}+ echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC}@@ -1099,7 +1137,7 @@ # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub- # prints for the "djgpp" host, or else GDB configury will decide that+ # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;;@@ -1248,6 +1286,9 @@ SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;;+ SX-ACE:SUPER-UX:*:*)+ echo sxace-nec-superux${UNAME_RELEASE}+ exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;;@@ -1261,16 +1302,23 @@ UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then- if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then+ if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \- (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \- grep IS_64BIT_ARCH >/dev/null+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \+ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \+ grep IS_PPC >/dev/null+ then+ UNAME_PROCESSOR=powerpc+ fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub@@ -1285,7 +1333,7 @@ exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p`- if test "$UNAME_PROCESSOR" = "x86"; then+ if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi@@ -1294,15 +1342,18 @@ *:QNX:*:4*) echo i386-pc-qnx exit ;;- NEO-?:NONSTOP_KERNEL:*:*)+ NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;;- NSR-?:NONSTOP_KERNEL:*:*)+ NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;;+ NSX-*:NONSTOP_KERNEL:*:*)+ echo nsx-tandem-nsk${UNAME_RELEASE}+ exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;;@@ -1316,7 +1367,7 @@ # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems.- if test "$cputype" = "386"; then+ if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype"@@ -1358,7 +1409,7 @@ echo i386-pc-xenix exit ;; i*86:skyos:*:*)- echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'+ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos@@ -1369,23 +1420,25 @@ x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;;+ amd64:Isilon\ OneFS:*:*)+ echo x86_64-unknown-onefs+ exit ;; esac cat >&2 <<EOF $0: unable to guess system type -This script, last modified $timestamp, has failed to recognize-the operating system you are using. It is advised that you-download the most up to date version of the config scripts from+This script (version $timestamp), has failed to recognize the+operating system you are using. If your script is old, overwrite *all*+copies of config.guess and config.sub with the latest versions from: - http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess and- http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD+ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub -If the version you run ($0) is already up to date, please-send the following data and any information you think might be-pertinent to <config-patches@gnu.org> in order to provide the needed-information to handle your system.+If $0 has already been updated, send the following data and any+information you think might be pertinent to config-patches@gnu.org to+provide the necessary information to handle your system. config.guess timestamp = $timestamp
config.sub view
@@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script.-# Copyright 1992-2014 Free Software Foundation, Inc.+# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2014-05-01'+timestamp='2017-04-02' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by@@ -25,7 +25,7 @@ # of the GNU General Public License, version 3 ("GPLv3"). -# Please send patches with a ChangeLog entry to config-patches@gnu.org.+# Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument.@@ -33,7 +33,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from:-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases@@ -53,8 +53,7 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\-Usage: $0 [OPTION] CPU-MFR-OPSYS- $0 [OPTION] ALIAS+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -68,7 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc.+Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."@@ -117,8 +116,8 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \- knetbsd*-gnu* | netbsd*-gnu* | \- kopensolaris*-gnu* | \+ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \+ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`@@ -255,15 +254,16 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \+ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \- | epiphany \- | fido | fr30 | frv \+ | e2k | epiphany \+ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \- | i370 | i860 | i960 | ia64 \+ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \@@ -301,10 +301,12 @@ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \+ | pru \ | pyramid \+ | riscv32 | riscv64 \ | rl78 | rx \ | score \- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \+ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \@@ -312,6 +314,8 @@ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \+ | visium \+ | wasm32 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80)@@ -326,6 +330,9 @@ c6x) basic_machine=tic6x-unknown ;;+ leon|leon[3-9])+ basic_machine=sparc-$basic_machine+ ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none@@ -371,17 +378,18 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \+ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \- | elxsi-* \+ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \- | i*86-* | i860-* | i960-* | ia64-* \+ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \@@ -422,13 +430,15 @@ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \+ | pru-* \ | pyramid-* \+ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \@@ -436,6 +446,8 @@ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \+ | visium-* \+ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \@@ -512,6 +524,9 @@ basic_machine=i386-pc os=-aros ;;+ asmjs)+ basic_machine=asmjs-unknown+ ;; aux) basic_machine=m68k-apple os=-aux@@ -632,6 +647,14 @@ basic_machine=m68k-bull os=-sysv3 ;;+ e500v[12])+ basic_machine=powerpc-unknown+ os=$os"spe"+ ;;+ e500v[12]-*)+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`+ os=$os"spe"+ ;; ebmon29k) basic_machine=a29k-amd os=-ebmon@@ -773,6 +796,9 @@ basic_machine=m68k-isi os=-sysv ;;+ leon-*|leon[3-9]-*)+ basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`+ ;; m68knommu) basic_machine=m68k-unknown os=-linux@@ -828,6 +854,10 @@ basic_machine=powerpc-unknown os=-morphos ;;+ moxiebox)+ basic_machine=moxie-unknown+ os=-moxiebox+ ;; msdos) basic_machine=i386-pc os=-msdos@@ -920,6 +950,9 @@ nsr-tandem) basic_machine=nsr-tandem ;;+ nsx-tandem)+ basic_machine=nsx-tandem+ ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf@@ -1004,7 +1037,7 @@ ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;;- ppcle | powerpclittle | ppc-le | powerpc-little)+ ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*)@@ -1014,7 +1047,7 @@ ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;;- ppc64le | powerpc64little | ppc64-le | powerpc64-little)+ ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*)@@ -1215,6 +1248,9 @@ basic_machine=a29k-wrs os=-vxworks ;;+ wasm32)+ basic_machine=wasm32-unknown+ ;; w65*) basic_machine=w65-wdc os=-none@@ -1360,27 +1396,28 @@ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \- | -aos* | -aros* \+ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \- | -bitrig* | -openbsd* | -solidbsd* \+ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \- | -chorusos* | -chorusrdb* | -cegcc* \+ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \- | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \+ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \- | -uxpv* | -beos* | -mpeix* | -udk* \+ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)+ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \+ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*)@@ -1512,6 +1549,8 @@ ;; -nacl*) ;;+ -ios)+ ;; -none) ;; *)@@ -1606,6 +1645,9 @@ ;; sparc-* | *-sun) os=-sunos4.1.1+ ;;+ pru-*)+ os=-elf ;; *-be) os=-beos
integer-gmp.cabal view
@@ -1,5 +1,7 @@+cabal-version: 2.0 name: integer-gmp-version: 1.0.0.1+version: 1.0.1.0+ synopsis: Integer library based on GMP license: BSD3 license-file: LICENSE@@ -7,7 +9,14 @@ maintainer: hvr@gnu.org category: Numeric, Algebra build-type: Configure-cabal-version: >=1.10+description:+ This package provides the low-level implementation of the standard+ 'Integer' type based on the+ <http://gmplib.org/ GNU Multiple Precision Arithmetic Library (GMP)>.+ .+ This package provides access to the internal representation of+ 'Integer' as well as primitive operations with no proper error+ handling, and should only be used directly with the utmost care. extra-source-files: aclocal.m4@@ -46,7 +55,7 @@ StandaloneDeriving UnboxedTuples UnliftedFFITypes- build-depends: ghc-prim+ build-depends: ghc-prim ^>= 0.5.1.0 hs-source-dirs: src/ ghc-options: -this-unit-id integer-gmp -Wall cc-options: -std=c99 -Wall
src/GHC/Integer.hs view
@@ -49,7 +49,7 @@ eqInteger, neqInteger, leInteger, gtInteger, ltInteger, geInteger, compareInteger, - -- ** 'Int#'-boolean valued versions of comparision predicates+ -- ** 'Int#'-boolean valued versions of comparison predicates -- -- | These operations return @0#@ and @1#@ instead of 'False' and -- 'True' respectively. See
src/GHC/Integer/GMP/Internals.hs view
@@ -112,7 +112,7 @@ , orBigNat , bitBigNat - -- ** 'BigNat' comparision predicates+ -- ** 'BigNat' comparison predicates , isZeroBigNat , isNullBigNat#
src/GHC/Integer/Logarithms.hs view
@@ -3,6 +3,7 @@ {-# LANGUAGE UnboxedTuples #-} {-# LANGUAGE UnliftedFFITypes #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE BangPatterns #-} module GHC.Integer.Logarithms ( wordLog2#@@ -43,7 +44,7 @@ integerLogBase# (S# 2#) m = integerLog2# m integerLogBase# b m = e' where- (# _, e' #) = go b+ !(# _, e' #) = go b go pw | m `ltInteger` pw = (# m, 0# #) go pw = case go (sqrInteger pw) of
src/GHC/Integer/Type.hs view
@@ -418,10 +418,42 @@ GT -> bigNatToInteger (minusBigNat x y) {-# CONSTANT_FOLDED plusInteger #-} --- TODO--- | Subtract two 'Integer's from each other.+-- | Subtract one 'Integer' from another. minusInteger :: Integer -> Integer -> Integer-minusInteger x y = inline plusInteger x (inline negateInteger y)+minusInteger x (S# 0#) = x+minusInteger (S# x#) (S# y#)+ = case subIntC# x# y# of+ (# z#, 0# #) -> S# z#+ (# 0#, _ #) -> Jn# (wordToBigNat2 1## 0##)+ (# z#, _ #)+ | isTrue# (z# ># 0#) -> Jn# (wordToBigNat ( (int2Word# (negateInt# z#))))+ | True -> Jp# (wordToBigNat ( (int2Word# z#)))+minusInteger (S# x#) (Jp# y)+ | isTrue# (x# >=# 0#) = bigNatToNegInteger (minusBigNatWord y (int2Word# x#))+ | True = Jn# (plusBigNatWord y (int2Word# (negateInt# x#)))+minusInteger (S# x#) (Jn# y)+ | isTrue# (x# >=# 0#) = Jp# (plusBigNatWord y (int2Word# x#))+ | True = bigNatToInteger (minusBigNatWord y (int2Word#+ (negateInt# x#)))+minusInteger (Jp# x) (Jp# y)+ = case compareBigNat x y of+ LT -> bigNatToNegInteger (minusBigNat y x)+ EQ -> S# 0#+ GT -> bigNatToInteger (minusBigNat x y)+minusInteger (Jp# x) (Jn# y) = Jp# (plusBigNat x y)+minusInteger (Jn# x) (Jp# y) = Jn# (plusBigNat x y)+minusInteger (Jn# x) (Jn# y)+ = case compareBigNat x y of+ LT -> bigNatToInteger (minusBigNat y x)+ EQ -> S# 0#+ GT -> bigNatToNegInteger (minusBigNat x y)+minusInteger (Jp# x) (S# y#)+ | isTrue# (y# >=# 0#) = bigNatToInteger (minusBigNatWord x (int2Word# y#))+ | True = Jp# (plusBigNatWord x (int2Word# (negateInt# y#)))+minusInteger (Jn# x) (S# y#)+ | isTrue# (y# >=# 0#) = Jn# (plusBigNatWord x (int2Word# y#))+ | True = bigNatToNegInteger (minusBigNatWord x+ (int2Word# (negateInt# y#))) {-# CONSTANT_FOLDED minusInteger #-} -- | Multiply two 'Integer's@@ -728,7 +760,7 @@ in (# q', r' #) | True = qr where- qr@(# q, r #) = quotRemInteger n d+ !qr@(# q, r #) = quotRemInteger n d {-# CONSTANT_FOLDED divModInteger #-} divInteger :: Integer -> Integer -> Integer@@ -1002,7 +1034,7 @@ timesBigNatWord x 1## = x timesBigNatWord x@(BN# x#) y# | isTrue# (nx# ==# 1#) =- let (# !h#, !l# #) = timesWord2# (bigNatToWord x) y#+ let !(# !h#, !l# #) = timesWord2# (bigNatToWord x) y# in wordToBigNat2 h# l# | True = runS $ do mbn@(MBN# mba#) <- newBigNat# nx#@@ -1032,7 +1064,7 @@ _ <- svoid (writeBigNat# mbn li# (uncheckedShiftL# 1## bi#)) unsafeFreezeBigNat# mbn where- (# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS#+ !(# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS# testBitBigNat :: BigNat -> Int# -> Bool testBitBigNat bn i#@@ -1040,7 +1072,7 @@ | isTrue# (li# <# nx#) = isTrue# (testBitWord# (indexBigNat# bn li#) bi#) | True = False where- (# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS#+ !(# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS# nx# = sizeofBigNat# bn testBitNegBigNat :: BigNat -> Int# -> Bool@@ -1051,7 +1083,7 @@ (indexBigNat# bn li# `minusWord#` 1##) bi#) ==# 0#) | True = isTrue# ((testBitWord# (indexBigNat# bn li#) bi#) ==# 0#) where- (# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS#+ !(# li#, bi# #) = quotRemInt# i# GMP_LIMB_BITS# nx# = sizeofBigNat# bn allZ 0# = True@@ -1074,7 +1106,7 @@ where xn# = sizeofBigNat# x yn# = xn# +# nlimbs# +# (nbits# /=# 0#)- (# nlimbs#, nbits# #) = quotRemInt# n# GMP_LIMB_BITS#+ !(# nlimbs#, nbits# #) = quotRemInt# n# GMP_LIMB_BITS# @@ -1108,7 +1140,7 @@ where xn# = sizeofBigNat# x yn# = xn# -# nlimbs#- nlimbs# = quotInt# n# GMP_LIMB_BITS#+ nlimbs# = quotInt# (n# -# 1#) GMP_LIMB_BITS# orBigNat :: BigNat -> BigNat -> BigNat@@ -1659,7 +1691,7 @@ (# s'', mba# #) -> (# s'', MBN# mba# #) where bsz# = nsz# `uncheckedIShiftL#` GMP_LIMB_SHIFT#- (# s', n# #) = getSizeofMutableByteArray# mba0# s+ !(# s', n# #) = getSizeofMutableByteArray# mba0# s shrinkMutBigNat# :: MutBigNat s -> GmpSize# -> State# s -> State# s shrinkMutBigNat# (MBN# mba0#) nsz# s@@ -1667,13 +1699,13 @@ | True = shrinkMutableByteArray# mba0# bsz# s' where bsz# = nsz# `uncheckedIShiftL#` GMP_LIMB_SHIFT#- (# s', n# #) = getSizeofMutableByteArray# mba0# s+ !(# s', n# #) = getSizeofMutableByteArray# mba0# s unsafeSnocFreezeBigNat# :: MutBigNat s -> GmpLimb# -> S s BigNat unsafeSnocFreezeBigNat# mbn0@(MBN# mba0#) limb# s = go s' where n# = nb0# `uncheckedIShiftRL#` GMP_LIMB_SHIFT#- (# s', nb0# #) = getSizeofMutableByteArray# mba0# s+ !(# s', nb0# #) = getSizeofMutableByteArray# mba0# s go = do (MBN# mba#) <- resizeMutBigNat# mbn0 (n# +# 1#) _ <- svoid (writeWordArray# mba# n# limb#)@@ -1687,8 +1719,8 @@ | isTrue# (n# ==# n0#) = (unsafeFreezeBigNat# mbn) s'' | True = (unsafeShrinkFreezeBigNat# mbn n#) s'' where- (# s', n0# #) = getSizeofMutBigNat# mbn s- (# s'', n# #) = normSizeofMutBigNat'# mbn n0# s'+ !(# s', n0# #) = getSizeofMutBigNat# mbn s+ !(# s'', n# #) = normSizeofMutBigNat'# mbn n0# s' -- | Shrink MBN unsafeShrinkFreezeBigNat# :: MutBigNat s -> GmpSize# -> S s BigNat@@ -1718,7 +1750,7 @@ normSizeofMutBigNat# :: MutBigNat s -> State# s -> (# State# s, Int# #) normSizeofMutBigNat# mbn@(MBN# mba) s = normSizeofMutBigNat'# mbn sz# s' where- (# s', n# #) = getSizeofMutableByteArray# mba s+ !(# s', n# #) = getSizeofMutableByteArray# mba s sz# = n# `uncheckedIShiftRA#` GMP_LIMB_SHIFT# -- | Find most-significant non-zero limb and return its index-position@@ -1749,17 +1781,17 @@ | isTrue# (baszr# ==# 0#) -- i.e. ba# is multiple of limb-size , isTrue# (baszq# ==# n#) = (BN# ba#) | True = runS $ \s ->- let (# s', mbn@(MBN# mba#) #) = newBigNat# n# s- (# s'', ba_sz# #) = getSizeofMutableByteArray# mba# s'+ let !(# s', mbn@(MBN# mba#) #) = newBigNat# n# s+ !(# s'', ba_sz# #) = getSizeofMutableByteArray# mba# s' go = do _ <- svoid (copyByteArray# ba# 0# mba# 0# ba_sz# ) unsafeFreezeBigNat# mbn in go s'' where- (# baszq#, baszr# #) = quotRemInt# (sizeofByteArray# ba#) GMP_LIMB_BYTES#+ !(# baszq#, baszr# #) = quotRemInt# (sizeofByteArray# ba#) GMP_LIMB_BYTES# n# = fmssl (n0# -# 1#) - -- find most signifcant set limb, return normalized size+ -- find most significant set limb, return normalized size fmssl i# | isTrue# (i# <# 0#) = 0# | isTrue# (neWord# (indexWordArray# ba# i#) 0##) = i# +# 1#@@ -1880,7 +1912,7 @@ sz# = sizeofByteArray# ba# - (# szq#, szr# #) = quotRemInt# sz# GMP_LIMB_BYTES#+ !(# szq#, szr# #) = quotRemInt# sz# GMP_LIMB_BYTES# -- | Version of 'nextPrimeInteger' operating on 'BigNat's --